iPhone:如何仅缩放滚动视图中的图像
问题描述:
我有ScrollView缩放问题。有很多关于它的文章,但不知何故,我无法找到正确的解释,教程或代码片段。iPhone:如何仅缩放滚动视图中的图像
我有全屏幕scrollview和全屏imageview。在imageview内部我加载AspectFit图像(它们可以是垂直或水平的,水平的有黑色的空间在上面和下面)。当我进行缩放时,我不仅缩放图像,还缩放周围区域(ImageView的其余部分)。此外,当我旋转模拟器,而在变焦时,图像进入右上角而不是像开始时那样居中。甚至几乎没有像素出现在屏幕上。
我真的很想只放大图像,而不是整个imageview,或者至少让图像居中放大。
任何帮助欢迎..
答
我解决了这个问题,它不是最好的代码,但现在对我很好,我可能稍后再清理它。在这里发帖,也许它会帮助某人:)
UIImage *img = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:someImage ofType:@"jpg"]];
CGFloat scale;
if (scrollView.frame.size.width < scrollView.frame.size.height) // portrait
scale = scrollView.frame.size.width/img.size.width;
if (scrollView.frame.size.width > scrollView.frame.size.height) // landscape
scale = scrollView.frame.size.height/img.size.height;
imgView.frame = CGRectMake(scrollView.frame.origin.x, scrollView.frame.origin.y,
img.size.width*scale, img.size.height*scale);
imgView.center = CGPointMake(scrollView.frame.size.width/2, scrollView.frame.size.height/2);
[imgView setImage:img];
[scrollView setZoomScale:scale];
答
从PhotoScroller示例;将此添加到layoutSubviews:
// center the image as it becomes smaller than the size of the screen
CGSize boundsSize = self.bounds.size;
CGRect frameToCenter = imageView.frame;
// center horizontally
if (frameToCenter.size.width < boundsSize.width)
frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width)/2;
else
frameToCenter.origin.x = 0;
// center vertically
if (frameToCenter.size.height < boundsSize.height)
frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height)/2;
else
frameToCenter.origin.y = 0;
imageView.frame = frameToCenter;
这不会帮助缩放图像,但至少缩放它时它会保持居中。
究竟应该在哪里放? :)我只是改变图像与imgView.image = [UIImage imageNamed:whichNext];我并没有真正用图像创建任何Rect。我只是改变imageView的内容。 – yosh 2010-12-06 11:09:18