iOS 手势的使用方法(一)

=====仿照支付宝首页======参考http://www.jianshu.com/p/b2925fd1f904

 

 

1.注意处理轻扫和拖拽的冲突

//那个时间短的话 就让那个先执行

//处理 拖拽和轻扫 两个手势的冲突

//需要轻扫手势执行完毕后 再去执行拖拽 先执行轻扫后 再执行拖动

处理方法: [panges(拖拽对象) requireGestureRecognizerToFail:swiges(轻扫对象)];

2.程序出现手势不响应处理方法

//    手势如果不响应

//    1.看是否添加到了imageView上 如果是 把userInteractionEnabled 设置成YES

//    2.查看是否设置了背景颜色 如果没有设置 设置背景颜色

//    3.手势冲突 就得设置手势优先级了 (截获触发事件、手势)设置优先级

 

 

 

 

 

手势的使用方法

 

#import "ViewController.h"

 

@interface ViewController ()<UIGestureRecognizerDelegate>

 

@property (weak, nonatomic) IBOutletUIImageView *imageView;

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    //------------------------------轻触手势---------------------------

    //1.创建手势识别对象

    UITapGestureRecognizer * tap = [[UITapGestureRecognizeralloc]init];

    

    //2.设置对象属性

    //2.1设置点击次数

//    tap.numberOfTapsRequired = 2;

    

    //2.2 设置手指个数

//    tap.numberOfTouchesRequired = 2;

    

    

    //2.3设置代理

    tap.delegate = self;

    

    //3.添加监听事件

    [tap addTarget:selfaction:@selector(tap:)];

    

    //4.把手势对象添加到要作用的view上

    [self.imageViewaddGestureRecognizer:tap];

    

    

    //------------------------------轻触手势---------------------------

    

    

    //------------------------------长按手势---------------------------

    //1.创建手势对象

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

    

    //2.设置对象属性

    //2.1 设置长按时间

    longPress.minimumPressDuration =2;

    

    //2.2 设置允许移动误差

    longPress.allowableMovement = 30;

    

    //3.添加监听事件

    

    //4.添加到要作用的view上

    [self.imageViewaddGestureRecognizer:longPress];

    

    //------------------------------长按手势---------------------------

    

    

    //------------------------------拖拽手势---------------------------

    //1.创建手势对象

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

    

    //2.设置属性

    

    //3.监听事件

    

    //4.添加到要作用的view上

    [self.imageViewaddGestureRecognizer:pan];

    

    //------------------------------拖拽手势---------------------------

}

 

//拖拽手势方法

- (void) pan:(UIPanGestureRecognizer *) panGesture

{

    CGPoint point = [panGesture translationInView:panGesture.view];

    

    NSLog(@"%@",NSStringFromCGPoint(point));

    

    self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, point.x

                                                          , point.y);

    //每次拖拽后的数据清零,防止数值累加

    [panGesture setTranslation:CGPointZeroinView:panGesture.view];

    

//    self.imageView.transform = CGAffineTransformMakeTranslation(point.x, point.y);

}

 

=======================

 

//给按钮添加拖动的手势

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

    //   //获取当前作用点的坐标

    //    CGPoint p = [pan locationInView:pan.view];

    

    //获取移动的距离大小

    CGPoint point= [pan translationInView:pan.view];

    //更改视图的中心点坐标

    CGPoint points=pan.view.center;

    points.x+=point.x;

    points.y+=point.y;

    pan.view.center=points;

    //每次都清空一下消除坐标叠加(把当前手势所在的点的坐标变为(0,0))

    [pan setTranslation:CGPointZeroinView:self.btn];

    

}

=================

 

 

//长按手势方法

 

- (void) longPress:(UILongPressGestureRecognizer *) longGesture

{

    if (longGesture.state ==UIGestureRecognizerStateBegan)

    {

        [UIViewanimateWithDuration:0.5animations:^{

            self.imageView.alpha =0.2;

        } completion:^(BOOL finished) {

            [UIViewanimateWithDuration:0.5animations:^{

                self.imageView.alpha =1;

            }];

        }];

        NSLog(@"longPress");

    }

}

 

//实现代理方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

{

    //通过touch获取点击坐标

    CGPoint point = [touch locationInView:touch.view];

    if(point.y >self.imageView.bounds.size.height/2)

    {

        return NO;

    }

    return YES;

}

- (void) tap:(UITapGestureRecognizer *) tapGesture

{

    NSLog(@"我点!!!");

}

 

 

 

 

 

 

#import "ViewController.h"

 

@interface ViewController ()<UIGestureRecognizerDelegate>

@property (weak, nonatomic) IBOutletUIImageView *imageView;

@property (nonatomic,assign)int index;

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    //初始化

    self.index =1;

    

    //--------------捏合手势---------------------------

    //1.创建手势

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

    //2.设置属性

    

    //3.监听事件

    

    //设置代理

    pinch.delegate = self;

    

    //4.添加到要作用的view上

    [self.imageViewaddGestureRecognizer:pinch];

    

    //--------------捏合手势---------------------------

    

    

    //--------------旋转手势---------------------------

    //1.创建手势对象

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

    //设置代理

    rotation.delegate = self;

    //2.添加到要做用的view上

    [self.imageViewaddGestureRecognizer:rotation];

    

    //--------------旋转手势---------------------------

    

    

    

    //--------------轻扫手势---------------------------

    //1.创建手势对象

    //向左下一张

    UISwipeGestureRecognizer * leftSwipe = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(swipe:)];

    //设置轻扫方向

    leftSwipe.direction =UISwipeGestureRecognizerDirectionLeft;

    

    //2.添加要作用的view上

    [self.imageViewaddGestureRecognizer:leftSwipe];

    

    //向右上一张

    UISwipeGestureRecognizer * rightSwipe = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(swipe:)];

    

    //设置方向

    rightSwipe.direction =UISwipeGestureRecognizerDirectionRight;

    

    [self.imageViewaddGestureRecognizer:rightSwipe];

    

    

    //--------------轻扫手势---------------------------

}

//实现轻扫的方法

- (void) swipe:(UISwipeGestureRecognizer *) swiprGesture

{

    //添加动画效果

    CATransition * trans = [CATransitionanimation];

    

    trans.type = @"cube";

    

    

    //判断清扫方向

    if (swiprGesture.direction ==UISwipeGestureRecognizerDirectionLeft)

    {

        //下一张

        self.index++;

        

        trans.subtype =kCATransitionFromRight;

        

    }

    elseif (swiprGesture.direction ==UISwipeGestureRecognizerDirectionRight)

    {

        //上一张

        self.index--;

        trans.subtype =kCATransitionFromLeft;

    }

    

    //让图片循环

    if (self.index >4)

    {

        self.index =1;

    }

    else if (self.index <1)

    {

        self.index =4;

    }

    

    //拼接图片名

    

    NSString * imageName = [NSStringstringWithFormat:@"img%02d",self.index];

    

    self.imageView.image = [UIImageimageNamed:imageName];

    

    [self.imageView.layeraddAnimation:transforKey:nil];

}

 

//是否支持同时多个手势

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

{

    return YES;

}

//实现旋转手势方法

- (void) rotation:(UIRotationGestureRecognizer *) rotationGesture

{

    NSLog(@"%f",rotationGesture.rotation);

    

    self.imageView.transform =CGAffineTransformRotate(self.imageView.transform, rotationGesture.rotation);

    

    rotationGesture.rotation = 0;

    

//    self.imageView.transform = CGAffineTransformMakeRotation(rotationGesture.rotation);

}

 

//实现捏合手势事件方法

- (void) pinch:(UIPinchGestureRecognizer *) pinchGesture

{

    NSLog(@"%f",pinchGesture.scale);

    self.imageView.transform =CGAffineTransformScale(self.imageView.transform, pinchGesture.scale, pinchGesture.scale);

    

    pinchGesture.scale = 1;

//    self.imageView.transform = CGAffineTransformMakeScale(pinchGesture.scale, pinchGesture.scale);

}

 
******捏合手势设置最大最小缩放比例
#define MaxSCale 3.0  //最大缩放比例
#define MinScale 1  //最小缩放比例

@property(nonatomic,assign)float totalScale;
self.totalScale=1.0f;

-(void)pinge{
 // 添加捏合手势识别器
    g_pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureHandle:)];
    [self.playView addGestureRecognizer:g_pinchGestureRecognizer];
    
}
- (void)pinchGestureHandle:(UIPinchGestureRecognizer *)pinchGesture {
    NSLog(@"捏合手势");
//    UIView  *view=pinchGesture.view;
//    if (pinchGesture.state==UIGestureRecognizerStateBegan || pinchGesture.state==UIGestureRecognizerStateChanged){
//        //扩大、缩小倍数
//   view.transform=CGAffineTransformScale(view.transform, pinchGesture.scale, pinchGesture.scale);
//        pinchGesture.scale=1.f;
//    }
    CGFloat scale = pinchGesture.scale;
    
    //放大情况
    if(scale > 1.0){
        if(self.totalScale > MaxSCale) return;
    }
    
    //缩小情况
    if (scale < 1.0) {
        if (self.totalScale < MinScale) return;
    }
    
    pinchGesture.view.transform = CGAffineTransformScale(pinchGesture.view.transform, scale, scale);
    self.totalScale *=scale;
    pinchGesture.scale = 1.0;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值