2014-06-30 64 views
0

我在UIScrollView中使用UIImageView实现缩放图像。滚动视图不会占用全屏幕大小。我将scrollview的背景设为绿色。然后我捏了一下图像。iOS UIScrollView缩放增加空白区域

问题是,当我滚动缩放图像时,它在滚动视图中没有正确居中,并且有一些右侧和底部空间。如果我尝试滚动到顶部或左侧,则滚动视图不允许以相似的空间滚动到图像的末尾。空间的数量似乎与我捏手指时如何移动手指有关。

下面是截图:

space in scrollview is green 这里是我的代码:

// On viewWillAppear: 
- (void)loadMyImage 
{ 
    self.myImage.contentMode = UIViewContentModeScaleAspectFit; 
    self.myImage.image = self.originalImage; // an UIImage loaded from gallery 

    self.myImage.bounds = CGRectMake(0, 0, self.originalImage.size.width, self.originalImage.size.height); 
    self.scrollView.bounds = CGRectMake(0,0,320,200); 
    self.scrollView.frame = CGRectMake(0,0,320,200); 
    self.scrollView.minimumZoomScale=1.0f; 
    self.scrollView.maximumZoomScale=2.0f; 
    self.scrollView.delegate = self; 

    self.myImage.userInteractionEnabled = YES; 
} 

// Scroll view zooming events: 
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{return self.myImage;} 

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale 
{ 
    CGSize boundsSize = self.scrollView.bounds.size; 
    CGRect contentsFrame = self.myImage.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.myImage.center = CGPointMake(
     contentsFrame.origin.x + contentsFrame.size.width/2.0f, 
     contentsFrame.origin.y + contentsFrame.size.height/2.0f); 

    CGPoint offset = CGPointMake(
     self.myImage.center.x - self.scrollView.bounds.size.width/2.0f, 
     self.myImage.center.y - self.scrollView.bounds.size.height/2.0f); 

    [UIView animateWithDuration:.25 animations:^{ 
     [self.scrollView setContentOffset:offset]; 
    }]; 

    NSLog(@"Final state of frame: %g x %g (%g , %g) and center (%g , %g)", 
      self.myImage.frame.size.width, self.myImage.frame.size.height, 
      self.myImage.frame.origin.x, self.myImage.frame.origin.y, 
      self.myImage.center.x, self.myImage.center.y); 
    NSLog(@"offset: (%g , %g)", 
      self.scrollView.contentOffset.x, self.scrollView.contentOffset.y); 
    NSLog(@"Inset left %g , right %g , top %g , bottom %g", 
      self.scrollView.contentInset.left, 
      self.scrollView.contentInset.right, 
      self.scrollView.contentInset.top, 
      self.scrollView.contentInset.bottom); 
    NSLog(@"=================================="); 
} 

这里是我的输出:

Initial state of bounds: 320 x 200 
of frame: 320 x 200 (0 , 0) and center (160 , 100) 
offset: (0 , 0) 
================================== 
Final state of frame: 640 x 400 (0 , 0) and center (320 , 200) 
offset: (160 , 100) 
Inset left 0 , right 0 , top 0 , bottom 0 
================================== 

我试着设置automaticallyAdjustsScrollViewInsets为NO,但我的看法控制器不响应选择器。此外,内嵌报告0-s。

任何解决方案或解决方法将是伟大的。任何想法或可能的解释这种行为也将不胜感激。

+0

删除委托方法scrollViewDidEndZooming并再次检查。 – Apurv

+0

删除scrollViewDidEndZooming不能解决放大问题。同样,如果没有该代码,缩小图像时也不会居中。 –

回答