uiscrollview放大和缩小function无法正常工作

我有一个uiscrollview,里面有一个uiimageview。 我希望习惯能够放大图像,因为它是一个大图像。 scrollview只需要垂直滚动而不是水平滚动。

在添加缩放效果之前,我有以下代码,它按我的意愿工作,

-(void)viewDidLoad { [scrollView setScrollEnabled:YES]; [scrollView setContentSize:CGSizeMake(320, 1690)]; } 

所以我做了一些研究,最后得到了以下代码,以便进行缩放放大和缩小,

 -(void)viewDidLoad { scrollView.scrollEnabled = YES; [scrollView setContentSize:CGSizeMake(320, 1690)]; scrollView.delegate = self; // scrollView.contentSize = instImage.frame.size; scrollView.minimumZoomScale = scrollView.frame.size.width / instImage.frame.size.width; scrollView.maximumZoomScale = 2.0; [scrollView setZoomScale:scrollView.minimumZoomScale]; [[NSRunLoop currentRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]]; } - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return instImage; } - (CGRect)centeredFrameForScrollView:(UIScrollView *)scroll andUIView:(UIView *)rView { CGSize boundsSize = scroll.bounds.size; CGRect frameToCenter = rView.frame; // center horizontally if (frameToCenter.size.width < boundsSize.width) { frameToCenter.origin.x = ((boundsSize.width - frameToCenter.size.width) / 2); }else { frameToCenter.origin.x = 0; } return frameToCenter; } - (void)scrollViewDidZoom:(UIScrollView *)scrollV { instImage.frame = [self centeredFrameForScrollView:scrollV andUIView:instImage];; } 

现在我有以下问题,我无法弄清楚出了什么问题,

  1. 当视图刚刚在任何夹点之前加载时,scrollview不会一直滚动到图像的末尾。

  2. 当捏合放大时,它会向左和向右滚动并向上和向下滚动图像,但它仍然不会一直向下滚动到图像的末尾,但仍然比它最初在开始时所做的更多。

  3. 当我缩小时,整个事情就停止了。 你无法放大或缩小,它甚至不再滚动。 完全锁定。

我做了一些研究,发现了以下post。 https://stackoverflow.com/a/6384834/1103257

但我不知道在哪里可以找到NSDefaultRunLoopMode,甚至不知道如何搜索它以确定是否可以解决它。

我终于明白了。 此解决方案完美运行!

在你的.h文件中

 @interface scrollViewController : UIViewController { float oldScale; IBOutlet UIScrollView *scrollView; IBOutlet UIImageView *image; } @end 

然后将图像连接到uiimageview,其中包含要放大和缩小的照片,并且位于滚动视图中。 然后将scrollview连接到界面上的uiscrollview。

在.m文件中

 @implementation scrollViewController -(void)viewDidLoad { [super viewDidLoad]; scrollView.scrollEnabled = YES; scrollView.minimumZoomScale=1.0; scrollView.maximumZoomScale=4.0; [scrollView setContentSize:CGSizeMake(320, 1700)]; scrollView.delegate=self; } - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return image; } - (void)scrollViewDidEndZooming:(UIScrollView *)scrollV withView:(UIView *)view atScale:(float)scale { [scrollView setContentSize:CGSizeMake(scale*320, scale*1700)]; } @end 

希望这可以帮助。

以下是我实现滚动视图以在viewDidLoad中滚动大图像的方法

 UIImage *img = [UIImage imageNamed:@"image_name.png"]; largeImageView = [[UIImageView alloc] initWithImage:img]; [self.view insertSubview: largeImageView atIndex:0]; [(UIScrollView *)self.view setContentSize:[img size]]; [(UIScrollView *)self.view setMaximumZoomScale:2.2]; [(UIScrollView *)self.view setMinimumZoomScale:0.3]; [(UIScrollView *)self.view setCanCancelContentTouches:YES]; [(UIScrollView *)self.view setBounces:YES]; [mapImageView setUserInteractionEnabled:YES]; 

然后我还有viewForZoomingInScrollView方法:

 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return largeImageView; } 

此时你不需要scrollViewDidZoom函数。 我实现类似的东西,以便在整个图像可见时保持图像居中,但是现在我不担心如果我是你。

同样的问题,但有一个简单的解决方法,只需将图像视图设置为启用用户交互:

 [self.imageView setUserInteractionEnabled:YES]; 

对我来说问题是我使用自动布局而没有为UIScrollView设置缩放委托。 我使用的是自定义UIViewController,它也是一个UIScrollViewDelegate。 我发现你可以在代码中设置委托:

 func viewDidLoad() { scrollView.delegate = self } 

或者在故事板中通过选择UIScrolView设置委托,并在连接检查器中将委托拖动到指向UIViewController。