简介
苹果官方为我们提供了简单手势的识别器,但对于图形手势,例如五角星、三角形等的识别,就需要自己实现了。通过识别这些手势,可以去执行特定的操作,或是输入公式、释放魔法等,可以为App增光添彩。
下载与使用
该框架已经上传到github,点击这里前去下载,欢迎Star!
有关该框架的使用在github上已经写明,这里不再赘述,本文主要介绍的是图形手势识别的实现原理与框架的结构。
框架的结构
一个图形手势是一条曲线,可以用采样点来描述,存储采样点的类为SGGesturePoint
,使用它替代CGPoint
,更符合面向对象的操作规范。
采样点的集合为SGGestureSet
,它用于记录所有采样点以及手势的名称,以及标准化以后的手势向量。
手势向量使用SGGestureVector
存储,向量通过将所有采样点的(x,y)坐标依次插入并标准化得来,手势向量用于进行余弦相似度计算。
用于标准化集合、生成向量、保存、加载与识别手势的类为SGGestureManager
,它是一个单例对象,正常使用中只需要关心manager和set两个对象,其他对象由manager负责管理。
手势采样的过程
1.采样
Demo中给出的是使用UIPanGestureRecognizer完成的采样,每个采样点都是一个CGPoint
,将其包装秤NSValue
并且存储在数组中。
2.生成集合
使用SGGestureSet
的gestureSetWithName:points:方法,传入手势的名称与采样点(NSValue数组),即可使用采样点初始化一个集合。
3.重新采样
将集合中的所有采样点构成的图形看作折线,根据所需要的采样密度确定采样间距interval,并在原曲线上生成均匀分布的采样点,生成采样点的代码如下&