设置好win10触控板手势设置点,结果点一下就跑歪了,能不能固定住

手势和UI控件之间冲突的解决方法(比如UITapGesture和UIButton冲突,UIPanGesture和UISlider冲突) - CSDN博客
手势和UI控件之间冲突的解决方法(比如UITapGesture和UIButton冲突,UIPanGesture和UISlider冲突)
经过实验发现iOS5和iOS6里面,轻点手势和按钮的点击冲突机制是不同的,结果如下:
一个UIView上如果添加了一个按钮,又添加了Tap手势
在iOS5的设备上跑会只响应Tap手势,按钮不响应点击事件,只会有higlighted效果
在iOS5的设备上跑,按住了按钮,当过了3,4秒左右,跳过Tap手势的识别,再松手,按钮会响应
在iOS6的设备上跑,两者不会冲突,按钮可以点击,非按钮区域可以Tap手势
结论就是iOS5和6之间对于事件响应关系是有区别对待的,而且tap响应时间过后,系统会开始判断点击按钮,把刚才的长按理解为长期的touch down状态。这样处理我感觉很奇怪,万全之策还是要解决冲突,因为首先响应Tap事件,所以处理Tap事件的代理方法,过滤掉UIButton的影响。
具体实现,首先添加UIGestureRecognizerDelegate协议,然后把 Tap手势识别对象设置代理self,然后实现如下代码:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIButton class]]){
return NO;
return YES;
同理,其他的input事件也可以通过下面的代码实现:
(BOOL)gestureRecognizer:(UIGestureRecognizer
*)gestureRecognizer
shouldReceiveTouch:(UITouch
&&&&&&&&if
([touch.view
isKindOfClass:[UIControl
&&&&&&&&&&&&//
we touched a button, slider, or other UIControl
&&&&&&&&&&&&return
ignore the touch
&&&&return
handle the touch
比如UISlider:
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch {
if([touch.view isKindOfClass:[UISlider class]])
return NO;
return YES;
再次重申,iOS6没这个问题了
本文已收录于以下专栏:
相关文章推荐
对于事件响应关系是有区别对待的,而且tap响应时间过后,系统会开始判断点击按钮,把刚才的长按理解为长期的touch down状态。这样处理我感觉很奇怪,万全之策还是要解决冲突,因为首先响应Tap事件,...
tapGesture.delegate =
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shou...
手势的3个混淆属性
 *  本节介绍tap的3个弄不太林清并且容易混淆的属性:
   cancelsTouchesInView/delaysTouchesBe...
今天研究了一下iOS手势,手势包括点击,拖动,扫动,长按,捏合,旋转手势,下面上代码#define WIDTH [UIScreen mainScreen].bounds.size.width
不知道各位在做开发的时候,是否有在同一个页面里既有单击的手势,又有tableView的存在的情况,如果有的话,你可能会发现,你的tableView点击出问题了,打印一下,你会发现,你单击tableVi...
经过实验发现iOS5和iOS6里面,轻点手势和按钮的点击冲突机制是不同的,结果如下:
一个UIView上如果添加了一个按钮,又添加了Tap手势在iOS5的设备上跑会只响应Tap手势,按钮不响应点击事...
手势冲突,设置优先级
iOS开发中多手势冲突解决方案iOS开发中我们经常会使用到手势,合理的运用手势会使我们的app拥有更好的体验,但是在使用手势的同时也要注意避免手势和手势间,以及手势和其他控件间的冲突。本文就主要介绍在...
前几天在做项目的时候,遇到这个一个问题,在一个视图也就是UIView上添加一个手势,然后又在这个View上添加一个UIButton,然后给按钮添加事件,运行项目的时候我发现,不管是点击按钮还是视图上的...
前言在不考虑内部实现机制的情况下,我们使用三种方式来处理IOS手势:
1. Gesture Recongnizers — UIGestureRecognizer 及其子类
2. touches 响...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
FingerGestures研究院之初探Unity手势操作(一)
FingerGestures研究院之初探Unity手势操作(一)
围观71959次
编辑日期: 字体:
昨天搬家,我被无情的从4楼请上了10楼。原因就是房东们为了争家产打官司,受伤的永远是我们这些打工的租房的码农,呵呵!结果就是我们两家做了一个调换把房子换了一下。东西太多了,真的好累啊,好累啊~~前几天有个朋友问我Unity手势操作,后来我还帮他做了一个例子。我觉得在Unity中用这个手势操作的插件会很方便。以前我只是知道FingerGestures,但是没有深入的用过,这两天学习了一下。真的很好用。
最近研究了一下Unity中的一个手势操作的插件FingerGestures。它能很方便监听到Unity中的各种手势事件:上下左右四方向的滑动事件、按下事件、抬起事件、移动事件、连击事件、长按事件等等。它同时支持触摸屏操作与鼠标操作,总起来说使用起来还是比较方便的,今天写下教程记录这个插件的详细使用步骤。首先下载这个插件,大家可以在圣典上找这个插件的下载地址,当然也可以在本文最后下载该插件。
我看了一下这个插件底层的实现步骤,他是通过C#代理的形式来实现手势操作的。如下图红圈内所示,这五个重要的预设用来监听触摸与鼠标的手势事件。包括:单手触摸事件、双手触摸事件、鼠标事件、触摸事件。这里我们使用一个单手的事件,如图中所示将Finger Gertures Initializer拖拽入左侧层次视图中。
OK,上面我们说了该插件是通过C#代理形式来接收事件消息的,所以我们需要用脚本来注册这些事件从而开始接收消息。接着创建一个立方体对象用以处理手势操作,当然你也可以处理游戏中的任何对象。编写脚本FingerEvent.cs ,把这个脚本挂在这个立方体对象之上。
FingerEvent.cs脚本
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
using UnityEngine;using System.Collections;&public class FingerEvent :&&MonoBehaviour {&&&&&void OnEnable()&&&&{&&&& //启动时调用,这里开始注册手势操作的事件。&&&&& //按下事件: OnFingerDown就是按下事件监听的方法,这个名子可以由你来自定义。方法只能在本类中监听。下面所有的事件都一样!!!&&&&&&&&FingerGestures.OnFingerDown += OnFingerDown;&&&&&&&&//抬起事件
FingerGestures.OnFingerUp += OnFingerUp; &&&&//开始拖动事件 &&&&FingerGestures.OnFingerDragBegin += OnFingerDragBegin;&&&&&&&&//拖动中事件...&&&&&&&&FingerGestures.OnFingerDragMove += OnFingerDragMove;&&&&&&&&//拖动结束事件&&&&&&&&FingerGestures.OnFingerDragEnd += OnFingerDragEnd;
//上、下、左、右、四个方向的手势滑动
FingerGestures.OnFingerSwipe += OnFingerSwipe;
//连击事件 连续点击事件
FingerGestures.OnFingerTap += OnFingerTap;
//手指触摸屏幕中事件调用一下三个方法
FingerGestures.OnFingerStationaryBegin += OnFingerStationaryBegin;
FingerGestures.OnFingerStationary += OnFingerStationary;
FingerGestures.OnFingerStationaryEnd += OnFingerStationaryEnd;
//长按事件
FingerGestures.OnFingerLongPress += OnFingerLongPress;&&&&&}&&&&&void OnDisable()&&&&{&&&& //关闭时调用,这里销毁手势操作的事件&&&& //和上面一样&&&&&&&&FingerGestures.OnFingerDown -= OnFingerDown;
FingerGestures.OnFingerUp -= OnFingerUp;
FingerGestures.OnFingerDragBegin -= OnFingerDragBegin;&&&&&&&&FingerGestures.OnFingerDragMove -= OnFingerDragMove;&&&&&&&&FingerGestures.OnFingerDragEnd -= OnFingerDragEnd;
FingerGestures.OnFingerSwipe -= OnFingerSwipe;
FingerGestures.OnFingerTap -= OnFingerTap;
FingerGestures.OnFingerStationaryBegin -= OnFingerStationaryBegin;
FingerGestures.OnFingerStationary -= OnFingerStationary;
FingerGestures.OnFingerStationaryEnd -= OnFingerStationaryEnd;
FingerGestures.OnFingerLongPress -= OnFingerLongPress;&&&&}&&&&&//按下时调用&&&&void OnFingerDown( int fingerIndex, Vector2 fingerPos )&&&&{
//int fingerIndex 是手指的ID 第一按下的手指就是 0 第二个按下的手指就是1。。。一次类推。
//Vector2 fingerPos 手指按下屏幕中的2D坐标&
//将2D坐标转换成3D坐标&&&&&&&&transform.position = GetWorldPos( fingerPos );
Debug.Log(" OnFingerDown ="&&+fingerPos);&&&&}& //抬起时调用 void OnFingerUp( int fingerIndex, Vector2 fingerPos, float timeHeldDown ) {&
Debug.Log(" OnFingerUp ="&&+fingerPos); }& //开始滑动 void OnFingerDragBegin( int fingerIndex, Vector2 fingerPos, Vector2 startPos )&&&&{&&
Debug.Log("OnFingerDragBegin fingerIndex =" + fingerIndex&&+ " fingerPos ="+fingerPos +"startPos =" +startPos);&&&&} //滑动结束 void OnFingerDragEnd( int fingerIndex, Vector2 fingerPos ) {&
Debug.Log("OnFingerDragEnd fingerIndex =" + fingerIndex&&+ " fingerPos ="+fingerPos); } //滑动中&&&&void OnFingerDragMove( int fingerIndex, Vector2 fingerPos, Vector2 delta )&&&&{&&&&&&&&&& transform.position = GetWorldPos( fingerPos );
Debug.Log(" OnFingerDragMove ="&&+fingerPos); &&&&&} //上下左右四方方向滑动手势操作 void OnFingerSwipe( int fingerIndex, Vector2 startPos, FingerGestures.SwipeDirection direction, float velocity )&&&&{
//结果是 Up Down Left Right 四个方向
Debug.Log("OnFingerSwipe " + direction + " with finger " + fingerIndex);&&&&&}& //连续按下事件, tapCount就是当前连续按下几次 void OnFingerTap( int fingerIndex, Vector2 fingerPos, int tapCount )&&&&{&&&&&&&&&Debug.Log("OnFingerTap " + tapCount + " times with finger " + fingerIndex);&&&&&}& //按下事件开始后调用,包括 开始 结束 持续中状态只到下次事件开始!&&&&&&&& //OnFingerStationary 事件和&&OnFingerDragMove 有一个区别。&&&&&&&& //OnFingerStationary 是手指触摸在屏幕中的事件,而OnFingerDragMove是先触摸一下然后滑动的事件。&&&&&&&& //如果你需要时时捕获手指触摸屏幕中的事件时 用OnFingerStationary 即可 void OnFingerStationaryBegin( int fingerIndex, Vector2 fingerPos ) {&
Debug.Log("OnFingerStationaryBegin " + fingerPos + " times with finger " + fingerIndex); }& void OnFingerStationary( int fingerIndex, Vector2 fingerPos, float elapsedTime ) {&
Debug.Log("OnFingerStationary " + fingerPos + " times with finger " + fingerIndex);& }& void OnFingerStationaryEnd( int fingerIndex, Vector2 fingerPos, float elapsedTime ) {&
Debug.Log("OnFingerStationaryEnd " + fingerPos + " times with finger " + fingerIndex); }& //长按事件 void OnFingerLongPress( int fingerIndex, Vector2 fingerPos ) {&
Debug.Log("OnFingerLongPress " + fingerPos ); }& //把Unity屏幕坐标换算成3D坐标&&&&Vector3 GetWorldPos( Vector2 screenPos )&&&&{&&&&&&&&Camera mainCamera = Camera.main;&&&&&&&&return mainCamera.ScreenToWorldPoint( new Vector3( screenPos.x, screenPos.y, Mathf.Abs( transform.position.z - mainCamera.transform.position.z ) ) );&&&&}}
如下图所示,用鼠标还是IOS Android触摸事件都能很好的在这个Cube上响应,大家把我的代码手动的打一遍就什么都明白了。
上面的脚本,我们是直接绑定在立方体对象上来监听它,如果你想在别的脚本监听这个立方体对象的手势操作。只需调用如下方法即可。这个方法官方封装在了SampleBase中。因为官方的例子程序脚本是继承它的,所以子类就可以直接使用父类的方法。可是SampleBase会自动初始化一个SampleUI的脚本,不想初始化这个脚本的话直接用下面方法就行,原理就是通过射线我就不过多的解释了。传递鼠标或触摸的2D坐标即可得到触摸的3D模型对象。
1234567891011
&&&&// Return the GameObject at the given screen position, or null if no valid object was found&&&&public static GameObject PickObject( Vector2 screenPos )&&&&{&&&&&&&&Ray ray = Camera.main.ScreenPointToRay( screenPos );&&&&&&&&RaycastHit hit;&&&&&&&&&if( Physics.Raycast( ray, out hit ) )&&&&&&&&&&&&return hit.collider.gameObject;&&&&&&&&&return null;&&&&}
最后大家仔细看一下官方的FingerGestures.cs脚本,所有的手势操作的事件都在这里,包括单手操作事件、双手操作事件、鼠标操作事件。
插件以及源码下载地址:
雨松MOMO祝大家学习愉快,啦啦啦。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!红米手机 &
火星级手机控
楼主的荣誉
扫码下载App一键签到 升级加速
高效使用MIUI,这十个手势操作你一定要知道
扫一扫!手机看帖更爽
& & & & 买手机就是买系统。系统好用不好用,手势快捷操作是重点。优质的手势操作,会让我们在使用手机的时候感觉非常的顺手,无论是进行任何任务操作都会变得快捷有序。& & & &&传统的Android原生系统,通常是需要用户手指对屏幕进行点、按这样相对常规的手势去进行系统操作。在目前看来,很多App都支持快速手势滑动返回,但是如果像Android原生一样还只能局限于点击返回模块的话,是不是效率太低了一些呢?& & & &&MIUI是目前国内一流的基于Android定制的第三方操作系统,拥有超过1亿的用户群,这么多的用户,系统自然没的说。本着人性化、方便用户的目的,MIUI中还有一些快捷手势操作,手持小米手机的你是否都知道呢?下面,不妨我们来总结一下能让MIUI高效使用的10个手势操作吧!&1、屏幕任意位置下滑(上滑),呼出通知栏(全局搜索)&& & & &&众所周知,原生Android在使用中,如果要呼出顶部通知栏菜单的话,需要把手放在屏幕顶端并下滑。可是在手机屏幕越来越大的今天,我们在常规单手握持手机的时候,如果要用大拇指去触及屏幕顶部其实非常困难。&&& & & &&而在MIUI中, 我们无需用手指去屏幕顶端再下滑,只需要在屏幕任意位置向下滑动即可呼出顶部通知栏,省时省力!这样一来,我们即可以单手稳稳的握住手机,又可以在需要用通知栏的时候随意呼出啦!&& & & &&同时,MIUI系统的全局搜索是通过上滑的方式呼出,目前在开发版的固件之中,还可以搜索到浏览器、阅读以及小米生活的内容,功能更强大。2、多任务界面,下滑锁定上滑删除&& & & &&相信不少iOS用户一定对清除后台多任务有所吐槽,用户需要一个一个的去上滑删除应用后台,那么MIUI是怎么做的呢?&& & & &&在呼出多任务后台之后,你可以选择一个一个的上滑删除,也可以点击小叉叉快速一键清空后台应用,快速方便。那么如果有某个应用不想被一键清除,我们只需要在这个图标按住向下滑即可,这时候图标会出现一把小锁,代表这个应用已经被锁定,一键清除后台也不会影响这个应用了。&& & & &&小彩蛋:在多任务界面双指捏合,可以切换后台图标模式和预览模式的显示哦~3、双指捏合,进入桌面编辑模式&& & & &&双指捏合(也称“Pinch”)其实是一个比较常见的手势操作了,我们经常在相册里用这个手势去放大、缩小图片。&&& & & &&而在MIUI系统中,如果你在桌面这么双指“Pinch”一下,就可以直接进入桌面的编辑模式。而MIUI桌面编辑模式可大有用处,当我们被桌面各种图标凌乱排列而快“逼疯”的时候,就可以双制捏合进入编辑模式,利用图标篮子等功能整理桌面,或是给桌面添加桌面小工具。这么看来,这个“Pinch”一下还是挺有用处的嘛!4、按住图标,滑动桌面&& & & &&无论是iOS还是原生Android,如果你想把一个图标从屏幕的一页移动到另一页,都需要将图标按住并移动到屏幕边缘,这样屏幕才会一页一页的切换。但是我们在实际操作中,是不是经常会遇到按住图标拖动结果没按稳,图标又重新回到原来位置的情况呢?那么MIUI中是否有什么更方便的手势,可以帮我们拖动图标么?&&& & & &&MIUI系统中,你可以用一根手指按住图标,用另外的手指去滑动桌面。这样通过“按住图标,滑动桌面”的方式,我们可以轻松点起图标,然后从容的去寻找适合图标摆放的位置,再也不用担心没按稳这种情况发生啦!&&5、相机界面上下滑动,前置后置镜头翻转&& & & &&手机的拍照功能一定是我们经常用到的,小米手机拥有出色的摄像头配置参数,加上MIUI系统自带相机对成像质量的优化,无论是前置还是后置,都能呈现出极佳的拍照表现。可是一会儿拍风景,一会儿自拍秀,难道真的要去点那个摄像头切换按键么?&&& & & &&其实我们在握持手机,特别是单手握持的时候,如果要去点击切换键其实比较困难。为此,在MIUI系统自带相机应用中,我们只需要在取景器内向上(或向下)滑动,即可以直接切换前、后置摄像头,流畅方便。那么在我们和朋友聚会的时候,如果要自拍,你可以非常炫酷的掏出小米手机,打开相机这么滑动一下切换到前置,相信朋友们一定会非常惊讶:这到底是怎么做到的!&6、贴着Home键左右滑动,进入单手模式&& & & &&手机屏幕越做越大,人们手指可以控制的范围是有限的,在屏幕上操作就变得非常的不顺。而手机硬件还没能做到可以随意的折叠弯曲,提升大屏手机单手操作体验的重任自然落到了系统之上。&&& & & &&MIUI为了方便我们单手操作,特别推出了单手模式,只需要贴着Home键向旁边滑动即可呼出。因为使用手机的时候,一部分人经常用左手,而另外一部分人经常用右手。所以MIUI系统的单手模式支持从中心Home键向左右两侧滑动呼出,向哪边滑,单手模式就会偏向哪边,非常人性化。同时,MIUI系统的单手模式,在小米Note、红米Note上可以选择4.5、4.0和3.5吋三种大小,而在米4、米3、红米2/2A上为4.0吋和3.5吋两种大小。&7、双击角标,快速预览通知&& & & &&图标角标通知提醒,那个红红的“1” 一定会让很多人,特别是处女座受不了。可是角标提醒如果关掉又会错过一些重要的通知,不关掉又会不能忍,这应该怎么办呢?&&& & & &&MIUI系统中,用户快速双击带有角标的图标,可以快速预览该应用未读通知,同时红色的数字角标会一并消失。这样一来,我们既可以不点进应用就快速阅读消息,又能清除烦人的角标通知,一举两得!&8、短信右滑,标记为已读&& & & &&我们经常会遇到未读短信很多的情况,通常情况下,未读短信是会用小红点标注出来的,和角标一样,是“强迫症患者”的噩梦。在Android原生系统中,你只能一个一个的点开消除未读提醒,而如果“暴力”一些全选删除,又怕删除掉有用的信息。&&& & & &&MIUI系统的短信功能中,我们只要按住每条短信并向右滑动,即可取消未读提醒。这样一来,我们可以不点进短信对话框,便可以快速清理未读提醒,并且不会让有用的信息丢失。&PS:在MIUI的“邮件”App中,右滑可以切换已读/未读,左滑标记和删除邮件。&9、短信列表向下深拉,开启私密短信&& & & &&有时候,会有一些人问我们借用手机打打电话、发发短信。如果是关系比较熟的朋友不好拒绝,而我们手机中,又有一些重要的短信不希望被对方看见,这也确实挺苦恼的。&&& & & &&在MIUI系统的短信功能中,还有一个非常赞的“黑科技”--- 私密短信。只要在短信列表页面向下滑动,即可呼出私密短信区域。我们在这里添加“私密联系人”,那么这个与号码的短信则会被存储在私密短信区域内,相信只要借手机的对方不同为MIUI发烧友,那么你短信中“小甜心”、“小宝贝”之类的,就不用担心被别人看到啦!&PS:在MIIU“图库”的云相册tab下,也可以向下深拉开启私密相册。私密功能与私密短信一样喔。&&10、浏览器页数Tab上滑,关闭标签页&& & & &&大家在使用手机上网的时候,会不会经常不知不觉就打开了很多标签页呢?如果要关闭那么多的标签页,一定很麻烦。&&& & & &&MIUI系统浏览器中,有一个可以快速关闭打开的标签页的快速手势:点按住浏览器底部页数Tab标签键,轻轻向上一滑,当前标签页一下子就关闭啦,我们再也不用去到处找关闭按键啦!&& & & &&买手机就是买系统。MIUI作为国内最优秀的第三方定制系统,添加了丰富的快捷手势操作,方便我们快速使用手机,为我们带来很多方便。掌握了以上10个快捷手势,你玩起机来一定更高效!
扫描二维码,手机查看本帖
已有6人评分
miui太给力了,又学了几招!!
的确有不知道的手势,涨姿势了!
总评分: 经验 +30
我是米6 最新版8,用不了啊有的收拾
感谢分享!!!
有些确实很给力
楼主非常好,买小米就是看好小米
白色小椴 发表于
23:26:42哇 &非常喜欢第九点,太便利了!人性化。,涨知识了。 &好几个都不知道第九个怎么用的我怎么不能用
已入手红米note2,学习中........
最后两个原来真不知道。~
学习了,很不错
这个的确很赞哦!
垃圾系统,升级后QQ里的图片打不开,百度地图说是无法读取SD卡,微信里的图片也打不开,然后用UC下东西或者小米的应用汇下APP都下不了
楼主非常好,买小米就是看好小米的系统外,还有这么多的热心人和工程师。
过年还是多
本打算换一个小米NOTE64GB手机,可是不喜欢不能拆卸的电池,于是又想了,要不换个其它品牌的手机用一用?可是又难舍米抽系统,纠结中产生一个昐望,或许以后小米或红米64GB手机会有可拆卸电池的?于是乎决定等等看(注:为何喜欢可拆卸电池呢?因为有一次接到一个电话,当时用的是三星手机,电话又震又响,可手机接不了也挂不断,更关不了机,各处操作没反应,那电话似乎是恶意吧,一直不断,最后只好卸下电池)
学习了,涨知识了
学习了,涨知识了
学习了,涨知识了
学习了,涨知识了学习了,涨知识了学习了,涨知识了
京ICP证110507号 京ICP备号Access denied | www.fatieku.net used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website (www.fatieku.net) has banned your access based on your browser's signature (3bfa-ua98).博猫娱乐热新闻
澎湃新闻APP下载
博猫娱乐:热门推荐}

我要回帖

更多关于 苹果手势设置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信