zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

手势识别之轻点

识别 手势
2023-09-14 08:57:58 时间
[super viewDidLoad]; self.ImgView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"img.jpg"]]; self.ImgView.tag=10001; self.ImgView.frame=CGRectMake(100, 100, 100, 100); //UIImageView默认不支持用户交互 改为YES self.ImgView.userInteractionEnabled=YES; //Tap、pinch,pan、swipe只是一个简单的单个触摸,为了实现多触摸,需要设置multipleTouchEnabled支持多点触摸 self.ImgView.multipleTouchEnabled=YES; //实例化识别对象 并注册监听方法 UITapGestureRecognizer *singletap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(signaltap:)]; [self.ImgView addGestureRecognizer:singletap]; //需要点击的次数 默认1 singletap.numberOfTapsRequired=1; //同时点击的手指个数 默认1 在模拟器中模拟不出多个手指测试需要在真机 singletap.numberOfTouchesRequired=2; //设置代理 singletap.delegate=self; [self.view addSubview:self.ImgView]; UITapGestureRecognizer *doubletap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(signaltap:)]; doubletap.numberOfTapsRequired=2; doubletap.numberOfTouchesRequired=1; doubletap.delegate=self; [self.ImgView addGestureRecognizer:doubletap]; //两个手指点击一次和一个手指点击两个用户点击不清楚可能混淆 [singletap requireGestureRecognizerToFail:doubletap]; -(void)signaltap:(UIGestureRecognizer *)gestureRecognizer //获取点击的视图 UIView *view=gestureRecognizer.view; NSLog(@"%ld",view.tag); // 状态是枚举类型 // UIGestureRecognizerStatePossible, // UIGestureRecognizerStateBegan, // UIGestureRecognizerStateChanged, // UIGestureRecognizerStateEnded,正常情况只响应这一个 // UIGestureRecognizerStateCancelled, // UIGestureRecognizerStateFailed, // UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded NSLog(@"手势状态:%ld",gestureRecognizer.state); NSLog(@"轻点"); //询问一个手势接收者是否应该开始执行一个触摸接收事件 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer //指定响应的区域 CGPoint currentPoint=[gestureRecognizer locationInView:self.view]; if (CGRectContainsPoint(CGRectMake(100, 100, 50, 50), currentPoint)) { return YES; return NO; //询问delegate,两个手势是否同时接收消息,返回YES同时接收。返回NO,不同时接收,默认NO //也就是说两个gesture recognizers的delegate方法只要任意一个返回YES,则这两个就可以同时识别 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer NSLog(@"识别"); return NO; //在一个手势生命周期的早期,当一个视图里面所有的手势识别都仍处理Possible状态,那么在iOS 7中gestureRecognizer:shouldRequireFailureOfGestureRecognizer: 和 gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer: 消息会发送给这所有的手势识别的委托,来配对这个视图里的手势识别。返回YES来对这个两个传入的手势进行优先排序,就是说知道另一个手势识别失败时,这个手势识别才能成功。本质上,这些委托方法会把返回的结果作为一次和永久的决定,从而对每个手势发生时多出实时决策。(这个还不太理解) - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer return NO; - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer return NO; //在toucheBegan这个方法之前,也就是在手势状态为began之前.此方法在window对象在有触摸事件发生时,调用gesture recognizer的touchesBegan:withEvent:方法之前调用,如果返回NO,则gesture recognizer不会看到此触摸事件。(默认情况下为YES). - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch return YES; - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; @end
Gestures(手势) 如果你的手机是Android 4.x的原生Android系统的话,你可能可以在你的手机或者平板上看到谷歌提供的一个Gesture Builder的APP,该应用允许用户以类似于涂鸦的方式绘制一个手写符号,使之对应一个字符串名称!当然,没有这样的手机也没关系,我们有模拟器嘛,自己开个4.0的系统试试就知道了,另外,我们可以到\mmt\sdcard\gestures获取到保存手势的文件!好了,唠唠叨叨那么多,开始讲正题吧!
废话不多说,看下面的动图,和百度的还是有点点差别,我也不修改了,很简单,我实在是没有多余的时间,还要学习其他的东西,累啊,(复杂的动态View,可以使用SurfaceView,效率更高,我这里就简单使用View了)
社会主义 从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.