UIPinchGestureRecognizer用于缩放和平移xcode中的图像

我创build了一个包含图像视图的应用程序。 下面的代码使用UIPinchGestureRecognizer缩放图像正在工作。 这里innerview是我的观点的名字。

- (void)viewDidLoad { [super viewDidLoad]; //Zoom Photo UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)]; [innerview addGestureRecognizer:pinchGesture]; [pinchGesture release]; mCurrentScale = 0; mLastScale = 0; } -(void)handlePinch:(UIPinchGestureRecognizer*)sender { NSLog(@"latscale = %f",mLastScale); mCurrentScale += [sender scale] - mLastScale; mLastScale = [sender scale]; if (sender.state == UIGestureRecognizerStateEnded) { mLastScale = 1.0; } CGAffineTransform currentTransform = CGAffineTransformIdentity; CGAffineTransform newTransform = CGAffineTransformScale(currentTransform,mCurrentScale, mCurrentScale); innerview.transform = newTransform; } 

但如何在这个使用ScrollView查看图像正确?

在滚动视图中embedded您的innerView完成捏合后,您可以获取新图像的大小,然后设置其内容大小

 -(void)scale:(id)sender { if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) { lastScale = 1.0; CGSize zoomViewSize = CGSizeApplyAffineTransform(imgScrollView.frame.size, [(UIPinchGestureRecognizer *)sender view].transform); CGPoint centerPoint = CGPointApplyAffineTransform(imgScrollView.frame.origin, [(UIPinchGestureRecognizer *)sender view].transform); CGRect r = imgScrollView.bounds; CGSize scrollViewSize = imgScrollView.frame.size; imgScrollView.contentSize = zoomViewSize; imgScrollView.contentOffset = centerPoint; } CGFloat currentScale = [[[(UIPinchGestureRecognizer*)sender view].layer valueForKeyPath:@"transform.scale"] floatValue]; CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]); scale = MIN(scale, imgScrollView.maximumZoomScale / currentScale); scale = MAX(scale, imgScrollView.minimumZoomScale / currentScale); CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform; CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale); [[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform]; lastScale = [(UIPinchGestureRecognizer*)sender scale]; } 

希望这个帮助你:)

尝试这个

  -(void)scale:(id)sender { if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) { _lastScale = 1.0; } CGFloat scale = 1.0 - (_lastScale - [(UIPinchGestureRecognizer*)sender scale]); CGAffineTransform currentTransform = self.transform; CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale); [self setTransform:newTransform]; }