在Cocoa中,代表触摸对象的类是UITouch,当用户触摸屏幕后,就会产生相应事件,触摸事件在屏幕上有一个周期,触摸开始,触摸点移动,触摸结束,中途取消
UITouch中还包含以下(CGPoint)locationInView:(UIView *)view,返回一个CGPoint类型的值,表示触摸点在view视图的位置,
(CGPoint)previousLocationInView:(UIView *)view,该方法记录了前一个坐标值
下面三个事件方法是手指触摸到屏幕就会触发的方法
//UITouch事件
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
NSLog(@"触摸开始");
if(event.allTouches.count==1)
for (UITouch *touch in event.allTouches) {
source =[touch locationInView:self.view];
}
}
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
NSLog(@"moving");
}
-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
NSLog(@"触摸结束");
}
另一个事件触摸取消在类似触摸过程中突然来电打断就会触发
-(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
NSLog(@"触摸cancel");
}
对于触摸在iOS开发中暂时还未遇到过,
但是手势接触的比较多,所以本次主要讲手势,手势主要分点击,放大缩小,向不同方向滑动
点击(涉及到几根手指,几次点击屏幕)
UITapGestureRecognizer *finger=[[UITapGestureRecognizer alloc]init];
[finger setNumberOfTouchesRequired:n];//设置需要n个手指才能触发
[finger setNumberOfTapsRequired:n];//设置需要触碰n下
// 手势触发条件
[finger addTarget:self action:@selector(finger)];
// 添加手势
[self.view addGestureRecognizer:finger];
两个手指放大or缩小(当进行放大缩小时,会返回一个scale值,>1是放大 <1是缩小,图片的放大缩小就是基于这个手势)
//放大缩小手势
UIPinchGestureRecognizer *pinch=[[UIPinchGestureRecognizer alloc]init];
[pinch addTarget:self action:@selector(pinch:)];
[self.view addGestureRecognizer:pinch];
判断是放大还是缩小
-(void)pinch:(UIPinchGestureRecognizer *)pinch{
if(pinch.scale>1){
NSLog(@"拉大");
label.text=@"拉大";
}
else{
NSLog(@"缩小");
label.text=@"缩小";
}
}
向不同方向滑动的手势
//滑动手势向上
UISwipeGestureRecognizer *swipeup=[[UISwipeGestureRecognizer alloc]init];
[swipeup setDirection:UISwipeGestureRecognizerDirectionUp];
[swipeup addTarget:self action:@selector(swipeup:)];
[self.view addGestureRecognizer:swipeup];
<span style="font-size:14px;">-(void)swipeup:(UISwipeGestureRecognizer *)swipe{
CGPoint point=[swipe locationInView:[self view]];
label.text=[NSString stringWithFormat:@"向上滑动:%f,%f",point.x,point.y];
if(swipe.state==UIGestureRecognizerStateBegan){
source=[swipe locationInView:self.view];
}
else if(swipe.state==UIGestureRecognizerStateEnded){
distance=[swipe locationInView:self.view];
float juli;
CGFloat x=(source.x-distance.x);
CGFloat y=(source.y-distance.y);
juli=sqrt((x*x)+(y*y));
NSLog(@"%f",juli);
dislabel.text=[NSString stringWithFormat:@"单指滑动距离:%f",juli];
}
}</span>