更改子视图后,UIScrollView不遵守minimumZoomScale
我正在遇到一个问题,让UIScrollView正确更新以响应最小缩放比例的变化。
scrollview有一个UIImageView作为子视图,UIImageView的image属性是为响应UIPickerView的didFinishPickingMediaWithInfo方法而设置的:
- (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中以完整大小显示,并且无法缩小 – 仅放大。
我已将minimumZoomScale
的contentSize
, zoomScale
, minimumZoomScale
和maximumZoomScale
转储到日志中,每次都是相同的。 minimumZoomScale
都正确计算minimumZoomScale
。
就像使用minimumZoomScale
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