iOS 触摸和手势总结

来源:互联网 发布:winzip mac 5 注册码 编辑:程序博客网 时间:2024/06/07 02:57
触摸:

触摸表示手指在屏幕上的接触或移动并作为唯一多点触摸序列的一部分。

关闭事件投递
在缺省情况下,视图接收触摸事件,你可以设置视图的userInteractionEnable属性为NO来关闭对触摸事件的投递,一个视图在隐藏或透明状态下也无法接收到触摸事件!

在一段时间内关闭事件投递
beginIgnoringInteractionEvents方法并在以后的某个时间调用endIgnoringInteractionEvents方法。
第一方法使application对象完成停止对触摸事件的接收,第二个方法是恢复application对象对触摸事件的接收,你可以在应用中运行动画时关闭对事件的投递。

打开多触摸事件投递
缺省情况下,视图只会对触摸序列中的第一个触摸进行响应并忽略其他触摸。如果你需要处理多触摸则必须打开该视图的多触摸能力。你可以通过编程设置multipleTouchEnable属性为yes或者通过对XIB中设置勾选相关属性。

限制触摸事件给特定视图
缺省情况下,师徒的exclusiveTouch属性设置为NO,表示该视图并不限制当前窗口中的其他视图接收触摸事件。如果你设置其值为YES,则标识了该视图并只有该视图能对消息进行跟踪处理。窗口中的其他视图则无法接收到触摸事件。

限制触摸事件给子视图
一个从UIView继承的自定义视图,可以重载hitTest:withEvent方法来限制将多触摸事件传递给其子视图。

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

   //触摸开始

}

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

   //触摸移动过程中

}

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

   //触摸取消(被一个系统事件例如来电打断时)

}

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

   //触摸结束

}


UITouch对象的tapCount属性告诉你本次触摸点击了多少次;
timestamp属性告诉你本次触摸何时创建以及最后一次改变的时间。
phase属性告诉你本次触摸所处的阶段。


手势:

手势的话,个人理解就是触摸的封装,它把触摸过程中所接触到的各种功能都封装成一个个手势,方便调用。如:单击、多击、滑动、拖拽、缩放等。

UIGestureRecognizer

UIGestureRecognizer基类是一个抽象类,我们主要是使用它的子类(名字包含链接,可以点击跳到iosDeveloper library,看官方文档):

UITapGestureRecognizer

UIPinchGestureRecognizer

UIRotationGestureRecognizer

UISwipeGestureRecognizer

UIPanGestureRecognizer

UILongPressGestureRecognizer


从名字上我们就能知道,Tap(点击)、Pinch(捏合)、Rotation(旋转)、Swipe(滑动,快速移动,是用于监测滑动的方向的)、Pan(拖移,慢速移动,是用于监测偏移的量的)以及 LongPress(长按)。


-(void) viewDidLoad  

 [super viewDidLoad];   

 UIPanGestureRecognizer *panRecognizer =[[UIPanGestureRecognizer alloc] initWithTarget:selfaction:@selector(handlePanFrom:)];  

 [self.viewaddGestureRecognizer:panRecognizer];//关键语句,给self.view添加一个手势监测; 

 panRecognizer.maximumNumberOfTouches =1;  

 panRecognizer.delegate = self; 

 [panRecognizer release]; 

}

手势的写法大部分都与上边的类似,自己平时多注意运用和理解。这里只是举了一个例子,具体的其他的运用,自己好好琢磨琢磨!



0 0
原创粉丝点击