ios开发之多点触摸
一般,Tap、pinch,pan、swipe只是一个简单的单个触摸,它有一定的局限性,所以多点触摸诞生了~为实现多点触摸,首先得做下列事情
- 设置view的属性multipleTouchEnabled = YES(注意了。。。默认值是NO);
- 使用CFDictionaryRef来保存触摸过程的参数
对于使用多点触摸处理事件,你必须频繁地存储以后进行触摸比较的触摸状态。例如,你要比较每个触摸的结束点位置和原始位置,你可以在touchesBegan:withEvent: 方法中获取每个触摸的原始位置(使用locationInView:方法),然后存储在CFDictionaryRef对象中,使用UITouch对象地址作为KEY。然后你可以在touchesEnded:withEvent: 方法中取出原始点,和当前点进行比较。
需要注意的是这里使用CFDictionaryRef对象而不是NSDitionary对象,因为UITouch类没有实现NSCopying协议。

1 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 2 [self cacheBeginPointForTouches:touches]; 3 } 4 - (void)cacheBeginPointForTouches:(NSSet *)touches { 5 if ([touches count] > 0) { 6 for (UITouch *touch in touches) { 7 CGPoint *point = (CGPoint *)CFDictionaryGetValue(touchBeginPoints, 8 touch); 9 } } 10 if (point == NULL) { 11 point = (CGPoint *)malloc(sizeof(CGPoint)); 12 CFDictionarySetValue(touchBeginPoints, touch, point); 13 } 14 *point = [touch locationInView:view.superview]; 15 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架