手势识别器

⼿手势识别器是iOS中⽐比较抽象的一个类,⽤用于识别一个⼿势。由于有关手势的代码比较长,笔者在此加以归整,以方便日后的使用。



新建一个UIImageView视图,放入一张图片

UIImageView *imageView = [[UIImageViewalloc]initWithFrame:CGRectMake(0,20,self.view.frame.size.width,self.view.frame.size.height)];

图片视图中添加图片,字符串内为图片名称

    [imageView setImage:[UIImageimageNamed:@"2.jpg"]];

图片的调整,该属性是枚举类型

    image.contentMode =UIViewContentModeScaleAspectFit;

    [self.viewaddSubview:image];

    [imagerelease];



1.点击手势识别器

初始化点击手势

UITapGestureRecognizer *tap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(tapClick:)];

执行方法需要点击的次数

    tap.numberOfTapsRequired =2;

需要几个手指点击

    tap.numberOfTouchesRequired =1;

由于UIImageView默认没有交互,这里手动打开

    imageView.userInteractionEnabled = YES;

将手势添加到视图

    [imageView addGestureRecognizer:tap];

内存释放

    [taprelease];


下面是点击手势执行的内容,这里为打印一句话

-(void)tapClick:(UIScreenEdgePanGestureRecognizer *)tap5 {

    NSLog(@"点击手势");

}


2.长按手势识别器(和点击手势类似,这里不再冗述)

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longTapClick:)];

一次长按需要的时间,默认是0.5S

    longPress.minimumPressDuration = 2;

在长按判定中,允许用户手指移动的距离

    longPress.allowableMovement = 100;

    [imageViewaddGestureRecognizer:longPress];

    [longPressrelease];


-(void)longTapClick:(UILongPressGestureRecognizer *)longTap {

   NSLog(@"长按手势");

}


3.捏合手势识别器

UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizeralloc]initWithTarget:selfaction:@selector(pinchClick:)];

    [imageViewaddGestureRecognizer:pinch];

    [pinchrelease];


-(void)pinchClick:(UIPinchGestureRecognizer *)pinch {

   NSLog(@"捏合手势");

获得手势所在的view

   UIView *view = pinch.view;

    view.transform =CGAffineTransformScale(view.transform, pinch.scale, pinch.scale);

经本人测试,scale属性的值取0会无限缩小,而大于1则会无限放大

    pinch.scale =1;

}

PS:在模拟器上实现捏合,按住Alt + 鼠标左键


4.旋转手势识别器(和捏合类似,二者可能会冲突)

UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizeralloc]initWithTarget:selfaction:@selector(rotationClick:)];

    [imageViewaddGestureRecognizer:rotation];

    [rotationrelease];


-(void)rotationClick:(UIRotationGestureRecognizer *)rotation {

   NSLog(@"旋转手势");

   UIView *view = rotation.view;

    view.transform =CGAffineTransformRotate(view.transform, rotation.rotation);

rotation属性取0正好,取别的值速度会变快

    rotation.rotation =0;

}


5.平移手势识别器

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizeralloc]initWithTarget:selfaction:@selector(panClick:)];

最大手指数量(默认为1)

    pan.maximumNumberOfTouches = 1;

最小手指数量(默认为1)

    pan.minimumNumberOfTouches = 1;

    [imageViewaddGestureRecognizer:pan];

    [panrelease];


-(void)panClick:(UIPanGestureRecognizer *)pan {

   NSLog(@"平移手势");

   UIView *view = pan.view;

获取鼠标所在位置的坐标

   CGPoint point = [pantranslationInView:view];

   view.transform =CGAffineTransformTranslate(view.transform, point.x, point.y);

    [pansetTranslation:CGPointZeroinView:view];   

}


还有轻扫手势识别器UISwipeGestureRecognizer 和 屏幕边缘轻扫手势识别器UIScreenEdgePanGestureRecognizer,都是大同小异











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值