从名字上我们就能知道,
Tap(点击)、Pinch(捏合)、Rotation(旋转)、Swipe(滑动,快速移动,是用于监测滑动的方向的)、Pan (拖移,慢速移动,是用于监测偏移的量的)以及 LongPress(长按)。
- (Tap)点击作为最常用手势,用于按下或选择一个控件或条目(类似于普通的鼠标点击)、
- (Drag)拖动用于实现一些页面的滚动,以及对控件的移动功能。
- (Flick)滑动用于实现页面的快速滚动和翻页的功能。
- (Swipe)横扫手势用于激活列表项的快捷操作菜单
- (Double Tap)双击放大并居中显示图片,或恢复原大小(如果当前已经放大)。同时,双击能够激活针对文字编辑菜单。
- (Pinch open)放大手势可以实现以下功能:打开订阅源,打开文章的详情。在照片查看的时候,放大手势也可实现放大图片的功能。
- (Pinch close)缩小手势,可以实现与放大手势相反且对应的功能的功能:关闭订阅源退出到首页,关闭文章退出至索引页。在照片查看的时候,缩小手势也可实现缩小图片的功能。
- (Touch &Hold)在我的订阅页,长按订阅源将自动进入编辑模式,同时选中手指当前按下的订阅源。这时可直接拖动订阅源移动位置。
- 针对文字长按,将出现放大镜辅助功能。松开后,则出现编辑菜单。
- 针对图片长按,将出现编辑菜单。
- (Shake)摇晃手势,将出现撤销与重做菜单。主要是针对用户文本输入的。
//创建手势
-(void)creatRecognizers
{
//七大手势
//1.轻拍手势
//(1)创建手势对象
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
//(2)配置属性
//轻拍次数
tap.numberOfTapsRequired = 1;
//轻拍手指个数
tap.numberOfTouchesRequired = 1;
//将手势添加到指定视图上
[_imageView addGestureRecognizer:tap];
[tap release];
//移除手势
[_imageView removeGestureRecognizer:tap];
//2.轻扫手势
//创建手势对象
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction:)];
//配置属性
//一个轻扫手势 只能有两个方向(上下 或 左右)
//如果想支持 上下左右 轻扫 ,那么一个手势不能实现,需要创建两个清扫手势
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
NSLog(@"====%ld",swipe.direction);
//添加到指定视图
[_imageView addGestureRecognizer:swipe];
//释放所有权
[swipe release];
UISwipeGestureRecognizer *swipe2 = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction:)];
swipe2.direction = UISwipeGestureRecognizerDirectionRight;
[_imageView addGestureRecognizer:swipe2];
[swipe2 release];
//移除手势
[_imageView removeGestureRecognizer:swipe];
[_imageView removeGestureRecognizer:swipe2];
//3.长按手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];
//配置属性
//最短长按时间
longPress.minimumPressDuration = 0.5;
//允许移动的最大距离
longPress.allowableMovement = 10;
//添加到指定视图
[_imageView addGestureRecognizer:longPress];
//释放所有权
[longPress release];
//移除手势
[_imageView removeGestureRecognizer:longPress];
//4.平移手势
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
//添加到指定视图
[_imageView addGestureRecognizer:pan];
//释放所有权
[pan release];
//移除手势
[_imageView removeGestureRecognizer:pan];
//5.捏合手势
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)];
//添加到指定视图
[_imageView addGestureRecognizer:pinch];
//释放所有权
[pinch release];
[_imageView removeGestureRecognizer:pinch];
//6.旋转手势
UIRotationGestureRecognizer *rote = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(roteAction:)];
[_imageView addGestureRecognizer:rote];
[rote release];
[_imageView removeGestureRecognizer:rote];
//7.屏幕边缘手势
UIScreenEdgePanGestureRecognizer *screenPan = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(screenPanAction:)];
//属性
//设置边缘手势的位置
screenPan.edges = UIRectEdgeLeft;
//添加到指定视图
[_imageView addGestureRecognizer:screenPan];
//释放所有权
[screenPan release];
}
<p class="p1"><span class="s1">#pragma mark - </span><span class="s2">手势触发事件</span></p><p class="p2"><span class="s1"></span>
</p><p class="p3"><span class="s3">//</span><span class="s1">轻拍事件</span></p><p class="p4"><span class="s4">-(</span><span class="s5">void</span><span class="s4">)tapAction:(</span><span class="s1">UITapGestureRecognizer</span><span class="s4"> *)tap</span></p><p class="p5"><span class="s1">{</span></p><p class="p5"><span class="s1"> </span><span class="s6">NSLog</span><span class="s1">(</span><span class="s7">@"</span><span class="s8">拍了一下</span><span class="s7">"</span><span class="s1">);</span></p><p class="p6"><span class="s4"> </span><span class="s1">//</span><span class="s2">图片的切换</span></p><p class="p5"><span class="s1"> </span><span class="s9">_index</span><span class="s1"> ++;</span></p><p class="p5"><span class="s1"> </span><span class="s5">if</span><span class="s1"> (</span><span class="s9">_index</span><span class="s1"> == </span><span class="s10">9</span><span class="s1">) {</span></p><p class="p5"><span class="s1"> </span><span class="s9">_index</span><span class="s1"> = </span><span class="s10">0</span><span class="s1">;</span></p><p class="p5"><span class="s1"> }</span></p><p class="p7"><span class="s4"> </span><span class="s5">self</span><span class="s4">.</span><span class="s1">imageView</span><span class="s4">.</span><span class="s11">image</span><span class="s4"> = [</span><span class="s12">UIImage</span><span class="s4"> </span><span class="s6">imageNamed</span><span class="s4">:</span><span class="s1">_images</span><span class="s4">[</span><span class="s1">_index</span><span class="s4">]];</span></p><p class="p2"><span class="s1"> </span></p><p class="p5"><span class="s1">}</span></p><p class="p2"><span class="s1"></span>
</p><p class="p3"><span class="s3">//</span><span class="s1">轻扫事件</span></p><p class="p5"><span class="s1">-(</span><span class="s5">void</span><span class="s1">)swipeAction:(</span><span class="s12">UISwipeGestureRecognizer</span><span class="s1"> *)swipe</span></p><p class="p5"><span class="s1">{</span></p><p class="p5"><span class="s1"> </span><span class="s6">NSLog</span><span class="s1">(</span><span class="s7">@"%ld"</span><span class="s1">,swipe.</span><span class="s11">direction</span><span class="s1">);</span></p><p class="p3"><span class="s13"> </span><span class="s3">//</span><span class="s1">通过轻扫方向进行判定</span></p><p class="p8"><span class="s4"> </span><span class="s5">if</span><span class="s4"> (swipe.</span><span class="s11">direction</span><span class="s4"> == </span><span class="s1">UISwipeGestureRecognizerDirectionRight</span><span class="s4">) {</span></p><p class="p2"><span class="s1"> </span></p><p class="p5"><span class="s1"> </span><span class="s9">_index</span><span class="s1"> --;</span></p><p class="p5"><span class="s1"> </span><span class="s5">if</span><span class="s1"> (</span><span class="s9">_index</span><span class="s1"> < </span><span class="s10">0</span><span class="s1">) {</span></p><p class="p5"><span class="s1"> </span><span class="s9">_index</span><span class="s1"> = </span><span class="s10">8</span><span class="s1">;</span></p><p class="p5"><span class="s1"> }</span></p><p class="p7"><span class="s4"> </span><span class="s1">_imageView</span><span class="s4">.</span><span class="s11">image</span><span class="s4"> = [</span><span class="s12">UIImage</span><span class="s4"> </span><span class="s6">imageNamed</span><span class="s4">:</span><span class="s1">_images</span><span class="s4">[</span><span class="s1">_index</span><span class="s4">]];</span></p><p class="p5"><span class="s1"> </span><span class="s6">NSLog</span><span class="s1">(</span><span class="s7">@"</span><span class="s8">右轻扫</span><span class="s7">"</span><span class="s1">);</span></p><p class="p8"><span class="s4"> }</span><span class="s5">else</span><span class="s4"> </span><span class="s5">if</span><span class="s4">(swipe.</span><span class="s11">direction</span><span class="s4"> == </span><span class="s1">UISwipeGestureRecognizerDirectionLeft</span><span class="s4">)</span></p><p class="p5"><span class="s1"> {</span></p><p class="p5"><span class="s1"> </span><span class="s6">NSLog</span><span class="s1">(</span><span class="s7">@"</span><span class="s8">左轻扫</span><span class="s7">"</span><span class="s1">);</span></p><p class="p5"><span class="s1"> </span><span class="s9">_index</span><span class="s1"> ++;</span></p><p class="p5"><span class="s1"> </span><span class="s5">if</span><span class="s1"> (</span><span class="s9">_index</span><span class="s1"> == </span><span class="s10">9</span><span class="s1">) {</span></p><p class="p5"><span class="s1"> </span><span class="s9">_index</span><span class="s1"> = </span><span class="s10">0</span><span class="s1">;</span></p><p class="p5"><span class="s1"> }</span></p><p class="p7"><span class="s4"> </span><span class="s1">_imageView</span><span class="s4">.</span><span class="s11">image</span><span class="s4"> = [</span><span class="s12">UIImage</span><span class="s4"> </span><span class="s6">imageNamed</span><span class="s4">:</span><span class="s1">_images</span><span class="s4">[</span><span class="s1">_index</span><span class="s4">]];</span></p><p class="p5"><span class="s1"> }</span></p><p class="p2"><span class="s1"> </span></p><p class="p5"><span class="s1">}</span></p><p class="p2"><span class="s1"></span>
</p><p class="p3"><span class="s3">//</span><span class="s1">长按事件</span></p><p class="p5"><span class="s1">-(</span><span class="s5">void</span><span class="s1">)longPressAction:(</span><span class="s12">UILongPressGestureRecognizer</span><span class="s1"> *)longPress</span></p><p class="p5"><span class="s1">{</span></p><p class="p6"><span class="s4"> </span><span class="s1">//NSLog(@"</span><span class="s2">长按</span><span class="s1">");</span></p><p class="p3"><span class="s13"> </span><span class="s3">//</span><span class="s1">对于长按手势</span><span class="s3"> </span><span class="s1">有开始</span><span class="s3"> </span><span class="s1">和</span><span class="s3"> </span><span class="s1">结束</span><span class="s3"> </span><span class="s1">状态</span></p><p class="p6"><span class="s4"> </span><span class="s1">//longPress.state</span></p><p class="p8"><span class="s4"> </span><span class="s5">if</span><span class="s4"> (longPress.</span><span class="s11">state</span><span class="s4"> == </span><span class="s1">UIGestureRecognizerStateBegan</span><span class="s4">) {</span></p><p class="p5"><span class="s1"> </span><span class="s6">NSLog</span><span class="s1">(</span><span class="s7">@"</span><span class="s8">长按开始</span><span class="s7">"</span><span class="s1">);</span></p><p class="p2"><span class="s1"> </span></p><p class="p6"><span class="s4"> </span><span class="s1">//</span><span class="s2">将图片</span><span class="s1"> </span><span class="s2">保存到相册</span></p><p class="p6"><span class="s4"> </span><span class="s1">// UIImageWriteToSavedPhotosAlbum(<#UIImage *image#>, <#id completionTarget#>, <#SEL completionSelector#>, <#void *contextInfo#>)</span></p><p class="p5"><span class="s1"> }</span></p><p class="p5"><span class="s1">}</span></p><p class="p2"><span class="s1"></span>
</p><p class="p3"><span class="s3">//</span><span class="s1">平移事件</span></p><p class="p4"><span class="s4">-(</span><span class="s5">void</span><span class="s4">)panAction:(</span><span class="s1">UIPanGestureRecognizer</span><span class="s4"> *)pan</span></p><p class="p5"><span class="s1">{</span></p><p class="p3"><span class="s13"> </span><span class="s3">//</span><span class="s1">获取手势当前位置</span></p><p class="p5"><span class="s1"> </span><span class="s11">CGPoint</span><span class="s1"> position = [pan </span><span class="s6">translationInView</span><span class="s1">:</span><span class="s9">_imageView</span><span class="s1">];</span></p><p class="p6"><span class="s4"> </span><span class="s1">//</span><span class="s2">通过</span><span class="s1">transform </span><span class="s2">进行平移变换</span></p><p class="p5"><span class="s1"> </span><span class="s9">_imageView</span><span class="s1">.</span><span class="s11">transform</span><span class="s1"> = </span><span class="s6">CGAffineTransformTranslate</span><span class="s1">(</span><span class="s9">_imageView</span><span class="s1">.</span><span class="s11">transform</span><span class="s1">, position.</span><span class="s11">x</span><span class="s1">, position.</span><span class="s11">y</span><span class="s1">);</span></p><p class="p6"><span class="s4"> </span><span class="s1">//</span><span class="s2">将增量置为</span><span class="s1">0</span></p><p class="p8"><span class="s4"> [pan </span><span class="s1">setTranslation</span><span class="s4">:</span><span class="s11">CGPointZero</span><span class="s4"> </span><span class="s1">inView</span><span class="s4">:</span><span class="s9">_imageView</span><span class="s4">];</span></p><p class="p5"><span class="s1">}</span></p><p class="p2"><span class="s1"></span>
</p><p class="p3"><span class="s3">//</span><span class="s1">捏合事件</span></p><p class="p5"><span class="s1">-(</span><span class="s5">void</span><span class="s1">)pinchAction:(</span><span class="s12">UIPinchGestureRecognizer</span><span class="s1"> *)pinch</span></p><p class="p5"><span class="s1">{</span></p><p class="p6"><span class="s4"> </span><span class="s1">//</span><span class="s2">通过</span><span class="s1"> transform </span><span class="s2">进行视图捏合</span></p><p class="p5"><span class="s1"> </span><span class="s9">_imageView</span><span class="s1">.</span><span class="s11">transform</span><span class="s1"> = </span><span class="s6">CGAffineTransformScale</span><span class="s1">(</span><span class="s9">_imageView</span><span class="s1">.</span><span class="s11">transform</span><span class="s1">, pinch.</span><span class="s11">scale</span><span class="s1">, pinch.</span><span class="s11">scale</span><span class="s1">);</span></p><p class="p6"><span class="s4"> </span><span class="s1">//</span><span class="s2">设置比例</span></p><p class="p5"><span class="s1"> pinch.</span><span class="s11">scale</span><span class="s1"> = </span><span class="s10">1</span><span class="s1">;</span></p><p class="p5"><span class="s1">}</span></p><p class="p2"><span class="s1"></span>
</p><p class="p3"><span class="s3">//</span><span class="s1">旋转事件</span></p><p class="p4"><span class="s4">-(</span><span class="s5">void</span><span class="s4">)roteAction:(</span><span class="s1">UIRotationGestureRecognizer</span><span class="s4"> *)rote</span></p><p class="p5"><span class="s1">{</span></p><p class="p6"><span class="s4"> </span><span class="s1">//</span><span class="s2">通过</span><span class="s1">transform </span><span class="s2">进行旋转变换</span></p><p class="p9"><span class="s4"> </span><span class="s9">_imageView</span><span class="s4">.</span><span class="s1">transform</span><span class="s4"> = </span><span class="s6">CGAffineTransformRotate</span><span class="s4">(</span><span class="s9">_imageView</span><span class="s4">.</span><span class="s1">transform</span><span class="s4">, rote.</span><span class="s1">rotation</span><span class="s4">);</span></p><p class="p6"><span class="s4"> </span><span class="s1">//</span><span class="s2">将旋转角度</span><span class="s1"> </span><span class="s2">置为</span><span class="s1">0</span></p><p class="p5"><span class="s1"> rote.</span><span class="s11">rotation</span><span class="s1"> = </span><span class="s10">0</span><span class="s1">;</span></p><p class="p2"><span class="s1"> </span></p><p class="p5"><span class="s1">}</span></p><p class="p2"><span class="s1"></span>
</p><p class="p3"><span class="s3">//</span><span class="s1">屏幕边缘事件</span></p><p class="p5"><span class="s1">-(</span><span class="s5">void</span><span class="s1">)screenPanAction:(</span><span class="s12">UIScreenEdgePanGestureRecognizer</span><span class="s1"> *)screenPan</span></p><p class="p5"><span class="s1">{</span></p><p class="p5"><span class="s1"> </span><span class="s6">NSLog</span><span class="s1">(</span><span class="s7">@"</span><span class="s8">边缘手势</span><span class="s7">"</span><span class="s1">);</span></p><p class="p5"><span class="s1">}</span></p>