2010-12-06 93 views
0

我有ScrollView缩放问题。有很多关于它的文章,但不知何故,我无法找到正确的解释,教程或代码片段。iPhone:如何仅缩放滚动视图中的图像

我有全屏幕scrollview和全屏imageview。在imageview内部我加载AspectFit图像(它们可以是垂直或水平的,水平的有黑色的空间在上面和下面)。当我进行缩放时,我不仅缩放图像,还缩放周围区域(ImageView的其余部分)。此外,当我旋转模拟器,而在变焦时,图像进入右上角而不是像开始时那样居中。甚至几乎没有像素出现在屏幕上。

我真的很想只放大图像,而不是整个imageview,或者至少让图像居中放大。

任何帮助欢迎..

回答

1

我解决了这个问题,它不是最好的代码,但现在对我很好,我可能稍后再清理它。在这里发帖,也许它会帮助某人:)

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]; 
0

从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; 

这不会帮助缩放图像,但至少缩放它时它会保持居中。

+0

究竟应该在哪里放? :)我只是改变图像与imgView.image = [UIImage imageNamed:whichNext];我并没有真正用图像创建任何Rect。我只是改变imageView的内容。 – yosh 2010-12-06 11:09:18