UI_UIGestureRecognizer(触摸手势)

1..所有的触摸手势的父类是UIGestureRecognizer,但我们平时都用它的每个单独的子类,包含点击,拖拽,捏合,拖动等,

2..

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor =[UIColor lightGrayColor];
    
    NSArray *imageArr =@[@"0",@"1.jpg",@"3.jpeg"];
    
    for (int i=0;i<imageArr.count; i++)
    {
        UIImageView *imgV =[[UIImageView alloc]initWithFrame:CGRectMake(10, 40+i*130, 100, 100)];
        imgV.image =[UIImage imageNamed:imageArr[i]];
        imgV.userInteractionEnabled=YES;
        
        [self addGesture:imgV];
        
        [self.view addSubview:imgV];
    }
    
}
-(void)addGesture:(UIView*)view
{
    //点(单击)手势
    UITapGestureRecognizer *tapGes =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGr:)];

    tapGes.numberOfTapsRequired    = 2;//设置点击次数
    tapGes.numberOfTouchesRequired = 1;//设置手指数
    [view addGestureRecognizer:tapGes];

    //拖拽移动手势
    UIPanGestureRecognizer *panGes =[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGr:)];
    [view addGestureRecognizer:panGes];

    //捏合手势
    UIPinchGestureRecognizer *pinchGes =[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGr:)];
    [view addGestureRecognizer:pinchGes];

    //旋转手势
    UIRotationGestureRecognizer *rotationGes =[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotation:)];
    [view addGestureRecognizer:rotationGes];

    //长按手势
    UILongPressGestureRecognizer *longGes =[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longG:)];
    [view addGestureRecognizer:longGes];

    //轻扫手势(和拖拽手势有冲突)默认为右 加一个方向,实例化一个轻扫手势 设置swipe.direction方向
//    UISwipeGestureRecognizer *swipe =[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipe:)];
//    swipe.direction                = UISwipeGestureRecognizerDirectionUp;
//    [view addGestureRecognizer:swipe];
    
}
#pragma mark 单击
//传的参数就是手势本身
-(void)tapGr:(UITapGestureRecognizer *)tapGr
{
// tapGr.view 响应手势的视图
//点击旋转
    tapGr.view.transform =CGAffineTransformRotate(tapGr.view.transform, M_PI_2);
}

#pragma mark 拖拽移动
-(void)panGr:(UIPanGestureRecognizer*)panGr
{
    //获取手势移动的坐标
    CGPoint move =[panGr translationInView:self.view];
    //当前的中心点加上移动的坐标
    panGr.view.center =CGPointMake(panGr.view.center.x +move.x, panGr.view.center.y +move.y);
    //每次动都会累加 每次动都得清零
    [panGr setTranslation:CGPointZero inView:self.view];
    
}
#pragma mark 捏合手势
-(void)pinchGr:(UIPinchGestureRecognizer*)pinchGs
{
    //响应的View的改变 (利用 比例 修改大小)  一参是修改前的形态  二参是横向.比例  三参是纵向.比例
    pinchGs.view.transform =CGAffineTransformScale(pinchGs.view.transform, pinchGs.scale, pinchGs.scale);
    
    //设置比例为1
    pinchGs.scale =1;
    
}
#pragma mark 旋转
-(void)rotation:(UIRotationGestureRecognizer*)rotationGR
{
    rotationGR.view.transform = CGAffineTransformRotate(rotationGR.view.transform, rotationGR.rotation);
    //旋转的倍数
    rotationGR.rotation =1;
    
}
#pragma mark 长按手势
-(void)longG:(UILongPressGestureRecognizer*)longGr
{//longGr.state 当前手势的状态
    
    //长按手势会被多次调用,使用候需要判断状态
    //长按刚一生效调用
    if(longGr.state ==UIGestureRecognizerStateBegan)
    {
        //创建一个核心动画
        CABasicAnimation *basicA =[CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
        
        //动画起始角度
        basicA.fromValue = @0;
        //结束角度
        basicA.toValue =@(M_PI*5);
        //完成一次时间
        basicA.duration =1;
        //一次完成后的是否动画还原
        basicA.autoreverses =YES;
        //动画次数
        basicA.repeatCount =10;
        //添加到 View的layer层
        [longGr.view.layer addAnimation:basicA forKey:@"ii"];
        
        //key用来取消
        // [longGr.view.layer  removeAnimationForKey:@"ii"];
        
    }
    
}

#pragma mark 轻扫手势
-(void)swipe:(UISwipeGestureRecognizer *)swipe
{
    //判断轻扫手势的方向
    if(swipe.direction ==UISwipeGestureRecognizerDirectionRight)
    {
        NSLog(@"向右扫");
        CGRect rect =swipe.view.frame;
        rect.origin.x +=10;
        swipe.view.frame =rect;
    }
    
    // & 按位与  direction向上
    if (swipe.direction & UISwipeGestureRecognizerDirectionUp) {
        CGRect rect = swipe.view.frame;
        rect.size.height += 10;
        rect.origin.y -= 10;
        swipe.view.frame = rect;
    }
    
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值