iOS基础 - 触摸事件&手势识别
==================================================================
一、触摸事件&手势识别
1> 4个触摸事件,针对视图的
2> 6个手势识别(除了用代码添加,也可以用Storyboard添加)
附加在某一个特定视图上的,其中需要注意轻扫手势通常会附加到根视图上。
* 大部分操作,都会在touchesBegan事件中处理,以防夜长梦多!
* touchesEnd事件通常用于处理touchesMoved事件中的收尾工作!
响应者链条只需要理解“链条”的产生和事件传递的顺序即可。
==================================================================
二、Quartz2D绘图
1> 以图形方式,实时绘图的技术,可以高效的绘制简单图形,增加界面的表现
2> 核心动画 <- CALayer(负责UIView中的内容的) <- Quartz2D
Quartz2D是C语言的框架!
Quartz2D是跨平台(MAC & iOS)的,大多数跨平台的技术都是C语言框架的。
GCD(多线程)
==================================================================
三、CALayer图层
1) 每一个视图都有一个根图层,图层用来负责视图中内容的显示,不负责响应事件
2) 图层可以添加子图层,每一个视图有且仅有一个根图层
3) 所有的非根图层,都具有隐式动画属性,直接修改这些属性,就可以产生动画
4) 核心动画的本质是通过以修改图层键值路径的方式实现动画的!
5) 在动画过程中,图层实际上是将视图中的内容生成一张图像参与动画,视图本身的位置并不会发生变化,其目的就是为了提高性能!
* 图层的工作顺序
1) - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
代理方法中绘制根图层中的所有内容
绘制结束后,调用视图的
2)- (void)drawRect:(CGRect)rect
从代理方法中,将绘制结果(图像)传给drawRect,直接将内容拷贝到屏幕
3) - (void)drawInContext:(CGContextRef)ctx
绘制子图层中的内容
关于CALayer需要掌握的内容:
1. 记住可动画属性
position 位置
backgroundColor 背景颜色
opacity 透明度
transform 形变
cornerRadius 圆角
content 内容(id)图像
==================================================================
四、CAAnimation
基本动画和关键帧动画都是通过修改图层的可动画属性实现的动画方式,以健值路径的方式修改。
要修改属性,可以利用view.layer.xxx智能提示帮助,不用硬记,能眼熟就行。
1) CABasicAnimation
fromValue 从哪里来
toValue 到哪里去
2) CAKeyFrameAnimation
values 一堆数值的数组
path 针对position属性的动画
3) CAAnimationGroup
将基本动画和关键帧动画组合并发使用
需要注意的是:keyPath不要重复,群组中的每个动画只能负责修改一个keyPath
4) *** CATransition(转场) ***
type:转场的类型
subType:方向(上下左右)
所有的动画都不要忘记指定duration。
其他常用属性
* repeatCount 重复次数
* autoReverse 自动翻转
在绝大多数应用程序开发中,基本动画和都可以使用块代码替代。关键帧动画在使用负责效果时点缀的。
对以上动画有印象,知道大概的使用方法,在需要的时候,去哪里查询即可。
* 转场动画使用还是比较频繁!
==================================================================
五、UIDynamic UI动力学
使用步骤:
1> 实例化一个animator
2> 实例化要参与仿真的视图或者控件
3> 实例化仿真行为
重力: Gravity
碰撞: Collision 有代理方法,可以添加边界碰撞
附加: Attachment 有刚性、弹性区别,设置damping即可
可以附加到一个点,也可以附加到一个视图上
吸附: Snap 设置damping
推: Push 单次推和连续推
如果是单次推,需要将active = YES
需要指定
* 力量
* 角度
元素属性,通常只需要改弹力系数即可
4> 将行为添加到animator,仿真立刻开始启动
==================================================================
六、KVC & KVO
KVC - Key Value Coding
KVO - Key Value Observer
KVC是通过键值路径的方式间接访问对象属性的,CAAnimation中可以通过KVC直接动态添加属性。
KVO是可以通过键值路径的方式观察某一个对象属性的变化,并及时通知!
关于KVO一定记住需要释放,否则会影响性能!
==================================================================
iOS基础 - 触摸事件&手势识别的更多相关文章
- iOS基础 - 触摸事件与手势识别
一.iOS的输入事件 UIKit可识别三种类型的输入事件: 触摸事件 运动(加速计)事件 远程控制事件 二.UIEvent iOS中许多事件对象都是UIEvent类的实例,记录事件产生的时刻和类型 U ...
- iOS中—触摸事件详解及使用
iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分 ...
- 阶段性总结⓵触摸事件&手势识别⓶Quartz2D绘图⓷CALayer图层⓸CAAnimation⓹UIDynamic UI动力学⓺KVC&KVO
知识点复习 1. 触摸事件&手势识别 1> 4个触摸事件,针对视图的 2> 6个手势识别(除了用代码添加,也可以用Storyboard添加) 附加在某一个特定视图上的, ...
- iOS:触摸事件和手势识别的介绍
触摸事件和手势识别的介绍 1.iOS的输入事件 UIKit可识别三种类型的输入事件: 触摸事件 运动事件 远程控制事件 iOS中许多事件对象都是UIEvent类的实例,UIEvent记录了事件所产生 ...
- iOS的触摸事件的用法以及和手势识别器的区别
1.首先来介绍下触摸事件和手势识别器的利与弊 触摸事件和手势识别器二者之间有直接的关系 手势识别器是在触摸事件的基础上演变过来的 当我们用到触摸事件时 默认的uiview是没有什么效果的 只能自定义v ...
- iOS的触摸事件
在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称其为@''响应者对象''UIApplication,UIViewController,UIView都 ...
- IOS 拖拽事件(手势识别)
@interface NJViewController () @property (weak, nonatomic) IBOutlet UIView *customView; @end @implem ...
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...
- 转发:iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
-- iOS事件全面解析 转载来自崔江涛(KenshinCui) 链接:http://www.cnblogs.com/kenshincui/p/3950646.html 概览 iPhone的成功很大一 ...
随机推荐
- SSIS从理论到实战,再到应用(7)----常用的数据类型转换操作
原文:SSIS从理论到实战,再到应用(7)----常用的数据类型转换操作 上期回顾: SSIS从理论到实战,再到应用(6)----SSIS的自带日志功能 在抽取各种应用的数据时候,经常会遇到数据需要转 ...
- CQRS
CQRS 2015-06-04 15:33 by 敏捷的水, 177 阅读, 0 评论, 收藏, 编辑 CQRS是Command Query Responsibility Seperation(命令查 ...
- hdu 2191 (多重背包+二进制优化)
Problem Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品, ...
- [Android] Upload package to device fails #2720
错误描述: 解决办法: 来源:https://facebook.github.io/react-native/docs/android-setup.html
- sql事务,在sql2000里判断执行是否成功用@@ERROR 判断
原文:sql事务,在sql2000里判断执行是否成功用@@ERROR 判断 贴个sql事务,在sql2000里判断执行是否成功用@@ERROR 判断 这个东西多少还是有点问题,sql2005了可以用t ...
- 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友
1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.另外一种初始化的方式是直接在构造方法里面实现初始化. 案比例如以 ...
- easyui datagrid footer 页脚问题
mvc 的一个例子 public string IndexV2() { var dataGridJson = new DataGridJson(); var data = new List<My ...
- Ormlite or()的使用
如题,由于不熟悉这个框架的API,所以用的时候出错了,直接上代码 public List<Type> getAllBetweenDate(String start, String end) ...
- 平安某金所奇葩的面经-关于幂等和ROA设计的反思
在公司一直在做跟支付有关的项目,某日接到平安某金所一男子电话,应该是之前某猎头投的,我正好在吃早饭(也不能怪他们上班早,我们公司弹性工作制,我一般上班比较晚). 因为饭馆信号不好,只能赶紧放下剩下的半 ...
- centos6的安装
centos6的安装,一步一图,有图有真相 打开虚拟机VMware,点击文件,选择[新建虚拟机],如图所示