iOS(五)触摸事件以及手势
2016-04-29 10:12
323 查看
在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开发中暂时还未遇到过,
但是手势接触的比较多,所以本次主要讲手势,手势主要分点击,放大缩小,向不同方向滑动
点击(涉及到几根手指,几次点击屏幕)
两个手指放大or缩小(当进行放大缩小时,会返回一个scale值,>1是放大 <1是缩小,图片的放大缩小就是基于这个手势)
判断是放大还是缩小
向不同方向滑动的手势
虽然比较基础,但其实iOS很多复杂的都是基于基础
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>
虽然比较基础,但其实iOS很多复杂的都是基于基础
相关文章推荐
- 用openssl为苹果开发者账号gerneate证书申请
- iOS-OC命名规范
- iOS属性中常用修饰词的总结
- iOS切图规范
- IOS中Json解析的四种方法
- 《Motion Design for iOS》(六)
- iOS开发-项目的完整重命名方法,图文教程。
- iOS开发多线程篇—线程间的通信
- iOS开发之静态库.a的制作教程
- iOS本地数据存取,看这里就够了
- IOS程序国际化
- 深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS
- iOS开发多线程篇—线程安全
- iOS中使用URL Scheme进行App跳转的教程
- iOS上架流程概述
- iOS中仿美团的下拉菜单开源组件
- iOS的AssetsLibrary框架访问所有相片
- iOS 偏好设置存储简单用法-数据持久化
- iOS 抽象工厂模式
- iOS本地数据存取,看这里就够了