iOS学习笔记(10下)六种手势

一、触摸类(UITouch)

//通过触摸类,我们可以实现各式的自定义手势

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

#if 0

    NSLog(@"开始触摸!!!");

    //单点触摸

    UITouch *touch=[touches anyObject];

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

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


#else

    //多点触摸

    NSSet *touchsSet=[event allTouches];

    for(UITouch *touch in touchsSet)

    {

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

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

    }

#endif

}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

    NSLog(@"触摸结束");

}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

{

    NSLog(@"触摸移动");

}

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

{

    NSLog(@"来电终断");

}

二、六种手势

1.UITapGestureRecognizer   Tap(敲击手势)

这里演示,在视图中添加了一个ImageView方便演示

-(void)createImageView

{

    UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    imageView.tag=1;

    NSString *path=[[NSBundle mainBundle] pathForResource:@"10_0" ofType:@"jpg"];

    NSData *data=[NSData dataWithContentsOfFile:path];

    imageView.image=[UIImage imageWithData:data];

    [self.view addSubview:imageView];

    [imageView release];

    //创建敲击手势

    UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapOnClick:)];

    [imageView addGestureRecognizer:tap];//将手势添加道imageView视图上

    imageView.userInteractionEnabled=YES;//UIImageView的与响应用户的touch值默认关闭的这里开启

    [tap release];

    

    //添加双击手势

    //一个试图可以有多个手势,但是一个手势只能添加道一个试图上

    UITapGestureRecognizer *doubleTap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doubleTapOnClick:)];

    doubleTap.numberOfTapsRequired=2;//指定敲击次数

    [imageView addGestureRecognizer:doubleTap];

    [doubleTap release];

    //设置优先响应双击,如果双击失败在响应单击手势

    [tap requireGestureRecognizerToFail:doubleTap];

     

}

-(void)tapOnClick:(UITapGestureRecognizer *)tap

{

    NSLog(@"图片被敲击了");

}

-(void)doubleTapOnClick:(UITapGestureRecognizer *)doubleTab

{

    NSLog(@"图片被双击了");

}


2.UIPinchGestureRecognizer  Pinch(二指往內或往外拨动,平时经常用到的缩放)捏合


-(void)createImageView

{

    UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    imageView.userInteractionEnabled=YES;

    imageView.tag=1;

    imageView.image=[UIImage imageNamed:@"girl.png"];

    imageView.center=self.view.center;

    [self.view addSubview:imageView];

    [imageView release];

   //创建一个捏合手势

    UIPinchGestureRecognizer *pich=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pichClick:)];

    [imageView addGestureRecognizer:pich];

    [pich release];

    

}

-(void)pichClick:(UIPinchGestureRecognizer *)pich

{

    static CGFloat scale=1;//设置比例值

    pich.view.transform=CGAffineTransformMakeScale(scale*pich.scale, scale*pich.scale);//将捏合手势的变形属性设置为CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)(缩放:设置缩放比例)仅通过设置缩放比例就可实现视图扑面而来和缩进频幕的效果。

    if(pich.state==UIGestureRecognizerStateEnded)//获取结束后手势的比例值

    {

        scale*=pich.scale;

    }

}



3.UIRotationGestureRecognizer  Rotation(旋转


-(void)createImageView

{

    UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    imageView.userInteractionEnabled=YES;

    imageView.tag=1;

    imageView.image=[UIImage imageNamed:@"girl.png"];

    imageView.center=self.view.center;

    [self.view addSubview:imageView];

    [imageView release];

    

    //添加旋转手势

    UIRotationGestureRecognizer *rgr=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotatonClick:)];

    [imageView addGestureRecognizer:rgr];

    [rgr release];

    

}

-(void)rotatonClick:(UIRotationGestureRecognizer*)rgr

{

    static CGFloat roatation=0;

    //设置手势的变形属性

    rgr.view.transform=CGAffineTransformMakeRotation(rgr.rotation+roatation);

     //获取弧度

    if(rgr.state==UIGestureRecognizerStateEnded)

    {

        roatation=rgr.rotation;

    }

}




4.UISwipeGestureRecognizer Swipe(滑动,快速移动)


-(void)createImageView

{

    UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    imageView.userInteractionEnabled=YES;

    imageView.tag=1;

    imageView.image=[UIImage imageNamed:@"10_0.jpg"];

    [self.view addSubview:imageView];

    [imageView release];

    

    //创建滑动手势,滑动手势只能设置一个方向

    UISwipeGestureRecognizer *leftSwipe=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(SwipeOnClick:)];

    //设置滑动方向  左滑动

    leftSwipe.direction=UISwipeGestureRecognizerDirectionLeft;

    [imageView addGestureRecognizer:leftSwipe];

    [leftSwipe release];

    //设置滑动手势右滑动

    UISwipeGestureRecognizer *rightSwip=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(rightOnClick:)];

    rightSwip.direction=UISwipeGestureRecognizerDirectionRight;

     [imageView addGestureRecognizer:rightSwip];

    [rightSwip release];

}

-(void)rightOnClick:(UISwipeGestureRecognizer *)sgr

{

    if(sgr.direction&&UISwipeGestureRecognizerDirectionRight)

    {

        NSLog(@"相右滑动");

    }

}

-(void)SwipeOnClick:(UISwipeGestureRecognizer*)sgr

{

    if(sgr.direction&UISwipeGestureRecognizerDirectionLeft)

    {

        NSLog(@"向左滑动");

    }

    

}




5.UIPanGestureRecognizer  Pan (拖移,慢速移动)


-(void)createImageView

{

    UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    imageView.userInteractionEnabled=YES;

    imageView.tag=1;

    imageView.image=[UIImage imageNamed:@"girl.png"];

    [self.view addSubview:imageView];

    [imageView release];

    //添加拖动手势

    UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panClick:)];

    [imageView addGestureRecognizer:pan];

    [pan release];

    

}

-(void)panClick:(UIPanGestureRecognizer*)pan

{

    //获取拖动时坐标

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

    

    static CGPoint center;

    if(pan.state==UIGestureRecognizerStateBegan)

    {

        //记录起始坐标

        center=pan.view.center;

    }

    //视图坐标的偏移量

    pan.view.center=CGPointMake(point.x+center.x, point.y+center.y);

    

}





6.UILongPressGestureRecognizer  LongPress(长按)

-(void)createImageView

{

    UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    imageView.userInteractionEnabled=YES;

    imageView.tag=1;

    imageView.image=[UIImage imageNamed:@"10_0.jpg"];

    [self.view addSubview:imageView];

    [imageView release];

    //添加长安手势

    UILongPressGestureRecognizer *longPress=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressOnClick:)];

    //设置几根手指触摸有效

    longPress.numberOfTouchesRequired=1;

    //设置最小响应时间

    longPress.minimumPressDuration=3;

    [imageView addGestureRecognizer:longPress];

    [longPress release];

}

-(void)longPressOnClick:(UILongPressGestureRecognizer*)longPress

{

    NSLog(@"图片被长按!");

}


三.手势的四种常用状态(state)


//刚开始生效

UIGestureRecognizerStateBegan,

//每次移动

UIGestureRecognizerStateChanged,

//手势结束

UIGestureRecognizerStateEnded, 

//手势被取消

UIGestureRecognizerStateCancelled,









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值