UIGestureRecognizer学习之——UIPinchGestureRecognizer

来源:互联网 发布:网络特产商城行业分析 编辑:程序博客网 时间:2024/05/16 02:12

UIPinchGestureRecognizer是UIGestureRecognizer的子类。
UIPinchGestureRecognizer除了继承UIGestureRecognizer的属性外,还提供如下俩个属性:

scale: //获取捏合的比例velocity: //获取捏合的速度

示例:和前面的UITapGestureRecognizer的例子相似。

- (void)viewDidLoad{    [super viewDidLoad];    self.view.backgroundColor = [UIColor lightGrayColor];    self.gv.layer.borderWidth = 2;    self.gv.layer.cornerRadius = 6;    // 设置gv控件支持用户交互    self.gv.userInteractionEnabled = YES;    // 设置gv控件支持多点触碰    self.gv.multipleTouchEnabled = YES;    // 创建手势处理器,指定使用该控制器的handlePinch:方法处理手势    UIPinchGestureRecognizer* gesture = [[UIPinchGestureRecognizer alloc]        initWithTarget:self action:@selector(handlePinch:)];    // 为gv控件添加手势处理器。    [self.gv addGestureRecognizer:gesture];}// 实现手势处理器的方法,该方法应该声明一个形参。// 当该方法被激发时,手势处理器会作为参数传给该方法的参数。- (void) handlePinch:(UIPinchGestureRecognizer*)gesture{    // 获取用户捏合的速度和比例    CGFloat velocity = gesture.velocity;    CGFloat scale = gesture.scale;    self.label.text = [NSString stringWithFormat:        @"用户捏合的速度为%g、比例为%g" , velocity , scale];    // 指定2秒后清除label的文本    [self.label performSelector:@selector(setText:)        withObject:@"" afterDelay:2];}@end

因为捏合手势处理器可以检测到用户手势捏合的比例,解析该捏合比例就即可对图片进行缩放。

@interface FKViewController : UIViewController@property (strong, nonatomic) IBOutlet UIImageView *imageView;@end
@implementation FKViewControllerUIImage* srcImage;CGFloat currentScale;- (void)viewDidLoad{    [super viewDidLoad];    [UIApplication sharedApplication].statusBarHidden = YES;    srcImage = [UIImage imageNamed:@"seashore.png"];    // 设置图片直接显示在中间(不进行任何缩放)    self.view.contentMode = UIViewContentModeCenter;    // 设置imageView初始显示的图片    self.imageView.image = srcImage;    // 设置初始的缩放比例    currentScale = 1;    // 设置imageView允许用户交互,支持多点触碰    self.imageView.userInteractionEnabled = YES;    self.imageView.multipleTouchEnabled = YES;    // 创建UIPinchGestureRecognizer手势处理器,该手势处理器激发scaleImage方法    UIPinchGestureRecognizer* gesture = [[UIPinchGestureRecognizer alloc]        initWithTarget:self action:@selector(scaleImage:)];    // 为imageView添加手势处理器    [self.imageView addGestureRecognizer:gesture];}- (void) scaleImage:(UIPinchGestureRecognizer*)gesture{    CGFloat scale = gesture.scale;    // 如果捏合手势刚刚开始    if (gesture.state == UIGestureRecognizerStateBegan)    {        // 计算当前缩放比        currentScale = self.imageView.image.size.width / srcImage.size.width;    }    // 根据手势处理的缩放比计算图片缩放后的目标大小    CGSize targetSize = CGSizeMake(srcImage.size.width * scale * currentScale,        srcImage.size.height * scale * currentScale);    // 对图片进行缩放    self.imageView.image = [srcImage imageByScalingToSize:targetSize];}@end
0 0