UI中的手势

原创 2015年07月08日 19:20:09

手势



一.触摸类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"];


相关文章推荐

手势操作 UI素材

  • 2012年05月21日 08:47
  • 1.76MB
  • 下载

手势和UI控件之间冲突的解决方法(比如UITapGesture和UIButton冲突,UIPanGesture和UISlider冲突)

经过实验发现iOS5和iOS6里面,轻点手势和按钮的点击冲突机制是不同的,结果如下: 一个UIView上如果添加了一个按钮,又添加了Tap手势在iOS5的设备上跑会只响应Tap手势,按钮不响应点击事...

UI day 5 target...action模式 代理模式 手势识别器

第一种模式 target…….action 第一步 //创建ActionViewController对象     ActionViewController  *actionVC = [[Acti...

UI - UIGestureRecognizer 手势

UIGestureRecognizer里有7个手势,下面介绍3种常用的手势- (void)viewDidLoad { [super viewDidLoad]; // Do any ad...

UI中的手势部分

- (void)viewDidLoad {     [super viewDidLoad];     // Do any additional setup after loading t...
  • yt_30
  • yt_30
  • 2015年02月04日 14:18
  • 280

UI 手势

Tap / longPress / Rotation / Swipe / Pan / ScreenEdgePan

UI初级连载十一-------触摸与手势

//当子视图超出自己的frame时,是否剪切子视图 self.clipsToBounds = YES; //是否开启多点触控 self.multipleTouchEnabled = ...

#Objective - C - UI-design - 第四天 -UIKit框架-UIKit-事件手势-刮刮乐小游戏

响应者 iOS中所有能响应事件(触摸、晃动、远程事件)的对象都是响应者。 系统定义了一个抽象的父类UIResponder来表示响应者。 其子类都是响应者。 阻断响应者链 响应者链可以被打断。无法完成检...

UI-设计模式 手势处理

1. 设计模式: 面向对象的编程核心思想:高内聚 低耦合 使用target action实现解耦 //MyButton.h文件 用UIView模拟一个按钮 #import @inter...

(素材源码)猫猫学IOS(三十五)UI之Quartz2D仿真支付宝手势解锁_代理获得密码。

猫猫分享,必须精品原创文章,欢迎转载。转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 源码:http://d...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UI中的手势
举报原因:
原因补充:

(最多只允许输入30个字)