捏缩放在scrollView内的UIImageView的影响?
我正在使用故事板(iOS 6.0)为我的应用程序创build照片库查看器。 这是我的imageViewController在故事板中的设置:
我已经确保在imageView和scrollView上启用userInteraction和多个触摸。 我想要做的是,捏,我想放大到imageView(最大比例3),并能够平移。 这是我目前有,但是,即使捏手势检测到规模不会改变。
- (IBAction)imagePinched:(id)sender { if (pinchRecognizer.state == UIGestureRecognizerStateEnded || pinchRecognizer.state == UIGestureRecognizerStateChanged) { NSLog(@"gesture.scale = %f", pinchRecognizer.scale); CGFloat currentScale = self.fullScreenView.frame.size.width / self.fullScreenView.bounds.size.width; CGFloat newScale = currentScale * pinchRecognizer.scale; if (newScale < 1) { newScale = 1; } if (newScale > 3) { newScale = 3; } CGAffineTransform transform = CGAffineTransformMakeScale(newScale, newScale); self.fullScreenView.transform = transform; pinchRecognizer.scale = 1; } }
网上的大多数问题和教程都是以编程的方式来处理创build视图,并且这样做,但是越less的代码越好(在我眼中)。 让故事板兼容这个最好的方法是什么? 先谢谢你!!!
更新:
这是我完整的.m文件代码:
- (void)viewDidLoad { [super viewDidLoad]; //Assign an image to this controller's imageView fullScreenView.image = [UIImage imageNamed:imageString]; //Allows single and double tap to work [singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer]; } - (IBAction)imageTapped:(id)sender { NSLog(@"Image Tapped."); //On tap, fade out viewController like the twitter.app [self dismissViewControllerAnimated:YES completion:nil]; } - (IBAction)imageDoubleTapped:(id)sender { NSLog(@"Image Double Tapped."); //On double tap zoom into imageView to fill in the screen. [fullScreenView setContentMode:UIViewContentModeScaleAspectFill]; } - (IBAction)imagePinched:(id)sender { if (pinchRecognizer.state == UIGestureRecognizerStateEnded || pinchRecognizer.state == UIGestureRecognizerStateChanged) { NSLog(@"gesture.scale = %f", pinchRecognizer.scale); CGFloat currentScale = self.fullScreenView.frame.size.width / self.fullScreenView.bounds.size.width; CGFloat newScale = currentScale * pinchRecognizer.scale; if (newScale < 1) { newScale = 1; } if (newScale > 3) { newScale = 3; } CGAffineTransform transform = CGAffineTransformMakeScale(newScale, newScale); self.fullScreenView.transform = transform; pinchRecognizer.scale = 1; } } - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.fullScreenView; } -(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale { } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
我认为苹果文档更好的解决scheme
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.imageView; } - (void)viewDidLoad { [super viewDidLoad]; self.scrollView.minimumZoomScale=0.5; self.scrollView.maximumZoomScale=6.0; self.scrollView.contentSize=CGSizeMake(1280, 960); self.scrollView.delegate=self; }
检查Apple文档
第一步是确保你的观点有正确的代表实施。 例如在.m文件中
@interface myRootViewController () <.., UIGestureRecognizerDelegate, UIScrollViewDelegate, ...>
从文档中,确保你有这个实现:
UIScrollView类可以有一个必须采用UIScrollViewDelegate协议的委托。 为了缩放和平移工作,委托必须实现viewForZoomingInScrollView:和scrollViewDidEndZooming:withView:atScale:; 此外,最大(最大缩放比例)和最小(最小缩放比例)缩放比例必须不同。
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.fullScreenView; } -(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {}
scrollViewDidEndZooming方法现在可以保持空白。 如果您已经这样做了,或者它仍然不起作用,请张贴更多的代码,然后更容易更具体的帮助。
您需要执行Wadi以上build议的操作,同时将setMinimumZoomScale设置为与setMaximumZoomScale不同。 它们默认都是1.0f。
之后, UIImageView
应该是pinchable
我已经创build了一个完整的演示应用程序(类似于Facebook的默认照片库),它展示了使用AutoLayout和故事板嵌套在滚动视图中的Image View的缩放。 在这里查看我的项目: http : //rexstjohn.com/facebook-like-ios-photo-modal-gallery-swipe-gestures/ 。
它还包括通过MKNetworkKit的asynchronous照片加载和通过照片库滑动手势。 享受,我希望它可以节省每个人的时间,试图找出这一点,因为它有点烦人。
这是苹果如何推荐做你想做的事情。 我使用苹果提供的代码,它的工作就像一个魅力! 如果你想优化内存pipe理,你可以使用iCarousel (由nicklockwood制作),它有一个cachingpipe理dealloc未使用的意见!
我创build了一个类来处理类似于Instagram的UIImageView的缩放。 可能是你在找什么,否则你可以看看我是如何实现的。 https://github.com/twomedia/TMImageZoom