更改子视图后,UIScrollView不遵守minimumZoomScale

时间:2012-05-14 15:40:58

标签: objective-c ios uiscrollview uiscrollviewdelegate

我在使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中以完整大小显示,并且无法缩小 - 仅放大。

我已将scrollView的contentSizezoomScaleminimumZoomScalemaximumZoomScale转储到日志中,每次都是相同的。每次正确计算minimumZoomScale

就好像滚动视图正在重新绘制,minimumZoomScale为1.0,忽略了已明确设置的事实。有什么明显的东西我在这里不见了吗?

1 个答案:

答案 0 :(得分:13)

问题似乎是 - 不确定此行为是否记录在某处 - 重置内容大小,而当前缩放比例设置为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