关闭

UI中的手势

323人阅读 评论(0) 收藏 举报

手势



一.触摸类UITouch

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

(1)创建UITouch

TouchView *view=[[TouchView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];

(2)开始触摸

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

{

NSLog(@"开始触摸");

①单点触摸

    UITouch *touch=[touches anyObject];

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

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

②多点触摸

    NSSet *touchesSet=[event allTouches];

    for (UITouch *touch in touchesSet) {

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

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


    }

#endif

}

(3)触摸结束

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

{

    NSLog(@"触摸结束");

}

(4)触摸移动

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

{

    NSLog(@"触摸移动");

}

(5)来电中断

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

{

    NSLog(@"来电中断");

}



二.手势类 UIGestureRecognizer

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

获取图片方法1:这种获取图片的方法不会把图片放到内存了,但只会复制一份

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

NSData *data=[NSData dataWithContentsOfFile:path];

UIImage *image=[UIImage imageWithData:data];

方法2:正常获取图片的方法

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

imageView.image=image;

[self.view addSubview:imageView];

[imageView release];

1、点击手势UITapGestureRecognizer

(1)①添加敲击手势

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

②开启

imageView.userInteractionEnabled=YES;

[imageView addGestureRecognizer:tap];

[tap release];


(2)①添加双击手势

一个视图可以有多个手势,但是一个手势只能添加到一个视图上

UITapGestureRecognizer *doubelTap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapClick:)];

②设置点击几次触发事件(这里是两次,也就是双击)

doubelTap.numberOfTapsRequired=2;

[imageView addGestureRecognizer:doubelTap];

[doubelTap release];


(3)优先响应双击手势方法,如果双击失败,再响应单击手势

[tap requireGestureRecognizerToFail:doubelTap];



2、长按手势UILongPressGestureRecognizer

imageView.userInteractionEnabled=YES;

(1)添加长按手势

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

(2)设置几根手指有效

longPress.numberOfTapsRequired=1;

(3)设置最小的响应时间

longPress.minimumPressDuration=2;




3、滑动手势UISwipeGestureRecognizer

imageView.userInteractionEnabled=YES;

(1)添加滑动手势sw

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

(2)设置滑动方向

leftSwipe.direction=UISwipeGestureRecognizerDirectionLeft;

UISwipeGestureRecognizer *rightSwipe=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];

rightSwipe.direction=UISwipeGestureRecognizerDirectionRight;

(3)将滑动手势添加到视图上

[imageView addGestureRecognizer:leftSwipe];

[imageView addGestureRecognizer:rightSwipe];




三.手势的四种常用状态

1、刚开始生效UIGestureRecognizerStateBegan,

2、每次移动UIGestureRecognizerStateChanged,

3、手势结束UIGestureRecognizerStateEnded, 

4、手势被取消UIGestureRecognizerStateCancelled,



四、其他手势

1、拖动手势UIPanGestureRecognizer

imageView.userInteractionEnabled=YES;

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




2、旋转手势UIRotationGestureRecognizer

imageView.userInteractionEnabled=YES;

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




3、捏合手势UIPinchGestureRecognizer

imageView.userInteractionEnabled=YES;

UIPinchGestureRecognizer *pgr=[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];




五、同时使用两种手势

利用代理UIGestureRecognizerDelegate


实现后结果:




六.视图摇摆

layer类似于ps的图层,如果把一个UIView看做图片的话,layer就像是图层.一个图片是由很多个大小不同的有层次的图层构成的, UIView也是.

1、添加摇动动画(基本动画)

CABasicAnimation * shakeAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

2、设置时间

shakeAnimation.duration=duration;

shakeAnimation.fromValue=[NSNumber numberWithFloat:-raid];

shakeAnimation.toValue=[NSNumber numberWithFloat:raid];

3、自动倒带设置

shakeAnimation.autoreverses=YES;

4、完成移除

shakeAnimation.removedOnCompletion=YES;

5、设置重复次数,FLT_MAX为最大次数

if (count==0) {

shakeAnimation.repeatCount=FLT_MAX;

}else{

shakeAnimation.repeatCount=count;

}

6、添加给视图 layer用于设置动画,修改视图圆角等

[self.layer addAnimation:shakeAnimation forKey:@"Let me shake"];

7、停止视图摇摆

[self.layer removeAnimationForKey:@"Let me shake"];


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8829次
    • 积分:356
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档