限制在iOS中使用缩放手势缩放图像的最大缩放比例

限制在iOS中使用缩放手势缩放图像的最大缩放比例

问题描述:

我目前能够使用Apple提供的缩放手势识别器缩放图像缩放比例,但是如何限制图像的最大缩放比例?限制在iOS中使用缩放手势缩放图像的最大缩放比例

我一直在使用Apple的SimpleGestureRecognizers sample,它将scale设置为1,并且使得缩放图像变得非常容易,但是当我删除它时,它会突然跳跃,这并不好。但是,自始终设置为1以来很难追踪比例。

在此先感谢您。

的UIKit会打电话给你的选择方法,多次为单个用户手势(捏)。每个电话都代表着规模小的增量(或减少)。如果您处理每个方法的调用,并为每个小增量相应地缩放图像,您将获得平滑的动画。

您使用识别器的scale属性来修改图像。然后,将该属性重置为1.0,以便下次调用选择器方法时,scale属性仅表示自上一次以来的新增小增量。您再次通过新的小增量重新缩放图像,并重置为1.0。如果您不重置识别器的比例尺并使用它重新缩放图像,则会通过累积更改来缩放图像,导致跳动行为(并且缩放比例不正确)。

因此,请确保将手势识别器的比例重置为1.要跟踪比例的总变化,可以为您的UIImageView或ViewController创建一个实例变量,也可能称为“比例”。 (事实上​​,如果您在drawRect中使用了新的缩放比例变量来绘制图片,则只需在setter中添加对setNeedsDisplay的调用即可,并且在缩放比例更改时不必编写任何代码来重新绘制图片。)

在任何情况下,下面的代码(包含猎食的限度检查,但在新的规模变量)应该为你的选择方法的工作:

- (void)pinch:(UIPinchGestureRecognizer *)recognizer 
{ 
    if (recognizer.state == UIGestureRecognizerStateChanged || 
     recognizer.state == UIGestureRecognizerStateEnded) { 
     if (imageView.scale < yourScaleLimit) { 
      imageView.scale *= recognizer.scale; 
      //any other code to scale up the image if 
      //just changing imageView.Scale is not enough 
     } 
     recognizer.scale = 1.0; 
    } 
} 

我希望这是有帮助的。

+0

在这里,imageView不支持.scale属性。这个错误的任何替代方法? – Hemang 2012-10-01 12:45:55

+1

@Hemang:注意上面的第三段。 'imageView.scale'是指您在UIImageView子类中创建的实例变量,用于跟踪累积的比例变化。或者,您可以在视图控制器中创建一个实例变量,然后将其称为“self.imageViewScale”。无论哪种方式,您都需要一个新变量来跟踪规模的累积变化。 – 2012-10-03 07:38:19

+0

感谢您的帮助。我错过了阅读第3段的那部分内容。所以我犯了一个错误。谢谢。代码工作正常。 – Hemang 2012-10-06 12:21:58

在选择器方法gestureRecognizer检查scalesenderUIPinchGestureRecognizer)的属性如果它小于你想要缩放,对图像应用缩放否则不要。例如,下面的方法是selector然后是pinchGesture

-(void)pinchAction:(UIPinchGestureRecognizer *)sender 
{ 
    if(sender.scale<yourScaleLimit) 
    { 
    //scale up the image 
    } 

} 

感谢,

+0

scale是两个pinchAction调用之间的相对值,在每次pinchAction调用后设置为1。所以它不是你的原始视图尺寸和你当前的视图尺寸之间的绝对关系 – Seega 2011-04-13 09:49:21