iOS中七种手势

iOS中提供了7种手势,其原理都是对touchesBegin, touchesEnded, touchesMoved, touchesCanceled 四种方法的封装,继承于UIGestureRecognizer类,
这七种方法分别是:

1. 轻拍手势 UITapGestureRecognizer
2. 长按手势 UILongPressGestureRecognizer
3. 轻扫手势 UISwipeGestureRecognizer
4. 拖拽手势 UIPanGestureRecognizer
5. 旋转手势 UIRotationGestureRecognizer</span>
6. 捏合手势 UIPinchGestureRecognizer</span>
7. 屏幕边缘拖拽 UIScreenEdgePanGestureRecognizer</span>
其中拖拽和屏幕边缘拖拽会有冲突, 轻扫手势和拖拽手势可能造成冲突
以下是各手势的属性应用及其方法,以及实现的一些图片处理功能:

 
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
//    UIImageView 的使用
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, 280, 280)];
    imageView.backgroundColor = [UIColor redColor];
    [self.view addSubview:imageView];
    [imageView release];
//    利用图片产生一个UIImage对象
    UIImage *image = [UIImage imageWithContentsOfFile:@"/Users/dlios/Documents/girl.jpg"];
//    将图片加载到相框
    imageView.image = image;
//    手势识别器
//    1. 轻拍手势
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
//    轻拍的设置
//    需要轻拍2次才能响应事件
    tap.numberOfTapsRequired = 2;
//    需要2个手指头才能响应事件
    tap.numberOfTouchesRequired = 2;
    [imageView addGestureRecognizer:tap];
    [tap release];
//    将UIImageView的用户交互打开,使它能响应轻拍
    imageView.userInteractionEnabled = YES;

//     2.长按手势
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAciton:)];
    [imageView addGestureRecognizer:longPress];
//    长按5秒触发方法
    longPress.minimumPressDuration = 5;
//    长按时,允许用户移动手指距离,默认10,单位像素
    longPress.allowableMovement = 1000;
    
//    3.轻扫手势
    UISwipeGestureRecognizer *swip = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];
    [imageView addGestureRecognizer:swip];
//    只支持一条直线上的轻扫  如上下 或者左右
     swip.direction = UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionUp;
//    4. 拖拽手势
//    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
//    [imageView addGestureRecognizer:pan];
//    5. 旋转手势
    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];
    [imageView addGestureRecognizer:rotation];
//    6.捏合手势
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)];
    [imageView addGestureRecognizer:pinch];
//    7.屏幕边缘拖拽
    UIScreenEdgePanGestureRecognizer *screenEdgePan = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(screenEdgePanAction:)];
    [imageView addGestureRecognizer:screenEdgePan];
//    设置检测哪一边的屏幕边缘
    screenEdgePan.edges = UIRectEdgeLeft;
}
//边缘拖拽触发方法
- (void)screenEdgePanAction:(UIScreenEdgePanGestureRecognizer *)screenEdgePan
{
    NSLog(@"边缘拖拽");
}
//捏合的触发方法
- (void)pinchAction:(UIPinchGestureRecognizer *)pinch
{
    NSLog(@"捏合");
    UIImageView *imageView = (UIImageView *)pinch.view;
//    在x,y轴方向 放大缩小
    imageView.transform = CGAffineTransformScale(imageView.transform, pinch.scale, pinch.scale);
    pinch.scale = 1;
}
//旋转手势方法
- (void)rotationAction:(UIRotationGestureRecognizer *)rotation
{
    NSLog(@"旋转");
    UIImageView *imageView = (UIImageView *)rotation.view;
//    让view旋转
    imageView.transform = CGAffineTransformRotate(imageView.transform, rotation.rotation);
//    让旋转弧度始终为0
    rotation.rotation = 0;


}
- (void)panAction:(UIPanGestureRecognizer *)pan
{
    NSLog(@"拖拽");
//    通过手势的view属性,获取到当前手势添加到的view
    UIImageView *imageViewe = (UIImageView  *)pan.view;
//    获取到当前手指接触的点
    CGPoint p = [pan translationInView:imageViewe];
    
//    让view 变形
    imageViewe.transform = CGAffineTransformTranslate(imageViewe.transform, p.x, p.y);
//    设置手势的属性
    [pan setTranslation:CGPointZero inView:imageViewe];
    
}
- (void)swipeAction:(UISwipeGestureRecognizer *)swipe
{
    NSLog(@"轻扫");
}
- (void)longPressAciton:(UILongPressGestureRecognizer *)longPress
{
//    当长按手势开始触发时
    if (longPress.state == UIGestureRecognizerStateBegan) {
        NSLog(@"longpress");
    }
    
}
//轻拍的触发方法
- (void)tapAction:(UITapGestureRecognizer *)tap
{
    NSLog(@"paipaipai");
    NSLog(@"%d", tap.numberOfTouches);
    
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值