IOS touch event animation 转动的风车
来源:互联网 发布:app限免软件 编辑:程序博客网 时间:2024/05/02 02:18
最近开始学习IOS的开发,师兄给我提出一个需求:实现一个可拖动的转盘。师兄提示我说利用touch event和UIView animation。经过一两天的折腾边学边做,算是实现了基本功能。这里写写加深自己的印象。
要求是这样的:在屏幕上显示一个圆盘,如果没有干扰的时候匀速转动,当手指触碰屏幕的时候转盘要跟随手指的运动而转动。我的思路是这样的:用一个NSTimer来控制转盘(UIImageView),每隔一段时间调用一个转动的动画(每次转动一个小角度),这样就可以达到匀速转动的效果。动画用UIView animation 来实现,在animation里面通过设置Trasform属性来转动。
匀速转动的问题解决了,接下来就要解决响应手势的问题。google了一下发现了GestureRecognizer类,于是开始采用TapGestureRecognizer,SwipeGestureRecognizer,和PanGestureRecognizer来响应手指的运动。Tap对应点击,Swipe对应在屏幕上的滑动,pan则对应拖动的动作。我在imageView上面添加了这几个GestureRecognizer,然后为每一个Recognizer编写对应的处理事件。然后我遇到了几个问题,一个是事件无法按照我的预期去响应,尤其是拖动,根本一塌糊涂。还有一个就是,我对于如何使用PanGestureRecognizer没有思路。后来问问师兄,师兄提醒说试试UIView 的touch event,所以我就开始了新的摸索。
看了一下资料以后发现其实用touch event处理更简洁,使用touch event要覆盖UIView的四个方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
手指刚刚触摸屏幕的时候触发的事件
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
手指在屏幕上移动是会不断触发这个事件
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
手指离开后触发的事件
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
触摸正常结束前,某个系统事件(例如有电话打进来)打断了触摸过程
在这是时间里面都有一个对象NSSet,这个set里面包含了一组UITouch对象至少一个,而每一个就对应这个一个手指的状态,也就是说touch event是可以同时记录多个手指触摸的状态的。UITouch 里面记录了当前屏幕被触摸的位置,有了这个就可以实现之前说到的拖动功能了。
大体思路是这样的,当touch开始时会触发touchesBegan事件,在这里面我记录下开始的位置startPoint,然后手指移动以后会触发touchesMoved事件,在这个事件里面得到当前位置endPoint,这样的话就得到了两个点再加上view的中心center就有了三个点,三个点构成的两条直线line1(startPoint,center) line2(endPoint,center),求出两条直线的夹角就可以知道需要转动的角度了。得出角度以后再用两条直线的到角确定转到的方向(顺时针,逆时针)。每一次转动后startPoint=endPoint继续move,直到touchesEnded就是最后的位置了。难点主要是数值计算,比较麻烦,要注意斜率不存在的情况。还有一个要注意的就是精度问题,当startPoint和endPoint相差很小的时候我是不处理的,设定一个伐值,当两点之间的距离大于一定值时才进行转动。避免了float由于数值太小导致的精度丢失,以及不必要的微小运动。
IOS学习笔记,欢迎指正错误。XCode项目代码:http://pan.baidu.com/share/link?shareid=2625688121&uk=4245725234
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- IOS touch event animation 转动的风车
- HTML5+CSS3实现的小风车-转动的童年
- 基于SDL实现图片的移动和风车的转动
- 玩转Css3动画 - 转动的风车效果
- iOS避免使用手势不响应touch event的方法
- Android 自定义View 之转动风车
- ios开发中使用storyboard关于touch的event的响应
- PVCBOT【4号】光能风车--太阳能转动机器人
- IOS中触摸事件(touch event)的分发以及响应者链(The Responder Chain)机制理解
- iOS圆盘转动引导图的简单实现
- android touch event summary
- Capture UITableView Touch Event
- Sencha touch titleBar event
- [Unity3D]Touch&Event
- Unity3D Animation Event
- vc++程序-旋转的风车
- Android学习----响应被父控件拦截的touch event
- cocos studio的事件绑定 Click Touch Event
- Erasure Coding in WAS简单译文
- ios实例开发精品文章推荐(7.22)
- 开启mysql慢查询日志并使用mysqldumpslow命令查看
- 如何在CSDN博客中的所贴的代码进行【代码块】显示
- 第三章数程序设计初步--控制结构综合项目1-2换分币
- IOS touch event animation 转动的风车
- NoSQL 数据库的使用场景
- Retinex算法详解
- 挑战编程:最小操作数
- 中位数(Median)
- mysql增量备份
- Monkey测试简介
- 【每周学习一种模式】java设计模式
- java卡片布局管理器