每当我点击图像时,我希望图像显示为具有缩放功能的较大图像。到目前为止,当我点击图像时,它会在滚动视图中显示为我想要的内容。但是,我必须幸运能够正确放大。大多数情况下,当我尝试缩放时,图像只是向下和向右移动,并且根本不会缩放。这是我的代码:
-(void) pictureButtonAction
{
self.scrollImageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
self.scrollImageView.contentSize = self.fullImageView.image.size;
self.scrollImageView.delegate = self;
self.scrollImageView.clipsToBounds = YES;
self.scrollImageView.scrollEnabled = YES;
[self.scrollImageView setMaximumZoomScale:4.0f];
[self.scrollImageView setMinimumZoomScale:1.0f];
[self.view addSubview:self.scrollImageView];
[self.scrollImageView addSubview:fullImageView];
}
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.fullImageView;
}
答案 0 :(得分:1)
ImageViews框架在变焦时发生了变化,因此向下移动。因此,每次缩放时都必须集中图像视图。
如果您的fullImageView.image.size小于您的滚动视图边界,则您的滚动视图内容大小应大于或等于您的图像大小,然后将您的滚动视图contentSize设置为滚动视图边界的两倍。
在scrollViewDidZoom委托方法
中调用以下函数-(void) centerScrollViewContents
{
CGSize boundsSize = self.scrollView.bounds.size;
CGRect contentsFrame = self.imageView.frame;
if (contentsFrame.size.width < boundsSize.width) {
contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0f;
} else {
contentsFrame.origin.x = 0.0f;
}
if (contentsFrame.size.height < boundsSize.height) {
contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;
} else {
contentsFrame.origin.y = 0.0f;
}
self.imageView.frame = contentsFrame;
}
试试这个,希望它会对你有所帮助;快乐的编码! :)
答案 1 :(得分:0)
@ Maria的答案有效,但在缩放时,您会遇到不必要的跳出,而不是在scrollViewDidZoom
下使用它,请使用scrollViewDidEndZooming:
委托以防止这种情况发生..
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
[self centerScrollViewContents];
}
并从她的代码中略微增强:
[UIView animateWithDuration:0 animations:^{
self.previewImageView.frame = contentsFrame;
}];
答案有点迟,但我希望这对某些人有用..