objective-c - 更改 subview 后 UIScrollView 不遵守 minimumZoomScale

标签 objective-c ios uiscrollview uiscrollviewdelegate

我在让 UIScrollView 正确更新以响应最小缩放比例的变化时遇到问题。

scrollview有一个UIImageView作为子view,响应UIPickerView的didFinishPickingMediaWithInfo方法设置UIImageView的image属性:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *takenImage = [info objectForKey:UIImagePickerControllerOriginalImage];

    [self.imageView setImage:takenImage];
    [self.imageView setFrame:CGRectMake(self.imageView.frame.origin.x, self.imageView.frame.origin.y, takenImage.size.width, takenImage.size.height)];

    [self.scrollView setContentSize:CGSizeMake(takenImage.size.width, takenImage.size.height)];

    [self.scrollView setMinimumZoomScale:[self.scrollView frame].size.width / takenImage.size.width];
    [self.scrollView setMaximumZoomScale:2.0];
    [self.scrollView setZoomScale:[self.scrollView minimumZoomScale] animated:YES];

    [self dismissModalViewControllerAnimated:YES];        

}

第一次使用此方法添加图像时,此方法可以正常工作。但是,如果再次触发此方法 - 即使添加与第一次相同的图像 - 后续图像将以全尺寸显示在 scrollView 中,并且无法缩小 - 只能放大。

我已经将 scrollView 的 contentSizezoomScaleminimumZoomScalemaximumZoomScale 转储到日志中,他们每次都是一样的。每次都正确计算 minimumZoomScale

就好像 scrollView 正在用 1.0 的 minimumZoomScale 重绘,忽略它已被显式设置的事实。有什么明显的东西是我在这里遗漏的吗?

最佳答案

问题似乎是 - 不确定是否在某处记录了此行为 - 在当前缩放比例设置为 1.0 以外的其他值时重置内容大小。

修复很简单:在设置新的内容大小之前,将zoomScale 属性重置为 1.0:

// See http://stackoverflow.com/questions/10586577
// first reset before new content size
scroller.zoomScale = 1.0f;
// set new content size
scroller.contentSize = newImage.size;
// ... adjust minimum/maximum zoom scales if needed

关于objective-c - 更改 subview 后 UIScrollView 不遵守 minimumZoomScale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10586577/

相关文章:

iphone - 检查设备上是否启用了 facetime

ios - 如何更改 UIScrollView 指示器颜色?

iOS tableView 单元格缓存问题未加载每个单元格

ios - 如何显示苹果的iAd

objective-c - 核心剧情: Two plots sharing the same x axis

ios - 如何用 RxSwift 的 DelegateProxy 替换协议(protocol)?

ios - UITableView didSelectRowAtIndexPath 从未调用过

ios - 每次释放 UIScrollView 时内存泄漏

ios - 如何在 Swift 中让按钮随背景滚动?

Objective-C/Cocoa 相当于 fread