我正在尝试实现一个简单的控件来允许用户放大和缩小图像。我在 UIScrollView 中有一个 UIImageView。此外,我想防止用户缩小太多以至于图像的宽度或高度小于滚动视图的大小。这就是问题所在:当我将 minimumZoomScale 设置为适当的大小时,图像出现在一个奇怪的位置。这是我配置滚动视图和图像视图的代码:
- (void)openNewImage:(UIImage *)image
{
_originalImage = image;
// Reset scroll view's zoom scales
// (must be reset before setting the image to the image view)
self.imageScrollView.zoomScale = 1.0f;
self.imageScrollView.minimumZoomScale = 0.01f;
// Set scroll view's content size to allow scrolling
self.imageScrollView.contentOffset = CGPointZero;
self.imageScrollView.contentSize = image.size;
// Set image and resize image view to image size
self.imageView.image = _originalImage;
self.imageView.frame =
CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);
[self.imageScrollView zoomToRect:self.imageView.frame animated:YES];
self.imageScrollView.minimumZoomScale = self.imageScrollView.zoomScale;
}
最后一行引起了问题,因为如果我将其注释掉,事情就会出现在它们应该出现的地方,但是用户可以缩小太多。在尝试调试问题时,我发现最后一行导致图像视图的框架原点更改为非常小的负数,例如 -1.11015e-06 而不仅仅是 0。如果我注释掉最后一行,图像视图的框架origin 是 0。我想知道这是否会导致问题,尽管那个小的负数实际上是 0。