日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手势识别iOS

發布時間:2023/12/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手势识别iOS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

iPhone中處理觸摸屏的操作,在3.2之前是主要使用的是由UIResponder而來的如下4種方式:

?- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
?- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
?- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
?- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

但是這種方式甄別不同的手勢操作實在是麻煩,需要你自己計算做不同的手勢分辨。后來。。。

蘋果就給出了一個比較簡便的方式,就是使用UIGestureRecognizer

二、UIGestureRecognizer

UIGestureRecognizer基類是一個抽象類,我們主要是使用它的子類(名字包含鏈接,可以點擊跳到ios Developer library,看官方文檔):

  • UITapGestureRecognizer

  • UIPinchGestureRecognizer

  • UIRotationGestureRecognizer

  • UISwipeGestureRecognizer

  • UIPanGestureRecognizer

  • UILongPressGestureRecognizer

從名字上我們就能知道,?Tap(點擊)、Pinch(捏合)、Rotation(旋轉)、Swipe(滑動,快速移動,是用于監測滑動的方向的)、Pan (拖移,慢速移動,是用于監測偏移的量的)以及 LongPress(長按)。

舉個例子,可以在viewDidLoad函數里面添加:

[cpp]?view plain?copy ?print?
  • -(void)?viewDidLoad??
  • {??
  • ?[super?viewDidLoad];??
  • ?//?Do?any?additional?setup?after?loading?the?view?from?its?nib.??
  • ?UIPanGestureRecognizer?*panRecognizer?=?[[UIPanGestureRecognizer?alloc]?initWithTarget:self?action:@selector(handlePanFrom:)];??
  • ?[self.view?addGestureRecognizer:panRecognizer];//關鍵語句,給self.view添加一個手勢監測;??
  • ?panRecognizer.maximumNumberOfTouches?=?1;??
  • ?panRecognizer.delegate?=?self;??
  • ?[panRecognizer?release];??
  • }??
  • 其它手勢方法類似。

    其核心就是設置delegate和在需要手勢監測的view上使用addGestureRecognizer添加指定的手勢監測。

    當然要記得在作為delegate的view的頭文件加上<UIGestureRecognizerDelegate>。

    不過有些手勢是關聯的,怎么辦呢?例如 Tap 與 LongPress、Swipe與 Pan,或是 Tap 一次與Tap 兩次。

    手勢識別是具有互斥的原則的比如單擊和雙擊,如果它識別出一種手勢,其后的手勢將不被識別。所以對于關聯手勢,要做特殊處理以幫助程序甄別,應該把當前手勢歸結到哪一類手勢里面。

    比如,單擊和雙擊并存時,如果不做處理,它就只能發送出單擊的消息。為了能夠識別出雙擊手勢,就需要做一個特殊處理邏輯,即先判斷手勢是否是雙擊,在雙擊失效的情況下作為單擊手勢處理。使用

    [A requireGestureRecognizerToFail:B]函數,它可以指定當A手勢發生時,即便A已經滿足條件了,也不會立刻觸發會等到指定的手勢B確定失敗之后才觸發。

    [cpp]?view plain?copy ?print?
  • -?(void)viewDidLoad???
  • {??
  • ????//?單擊的?Recognizer??
  • ????UITapGestureRecognizer*?singleRecognizer;??
  • ????singleRecognizer?=?[[UITapGestureRecognizer?alloc]?initWithTarget:selfaction:@selector(SingleTap:)];??
  • ????//點擊的次數??
  • ????singleTapRecognizer.numberOfTapsRequired?=?1;?//?單擊??
  • ??
  • ????//給self.view添加一個手勢監測;??
  • ??
  • ??[self.view?addGestureRecognizer:singleRecognizer];??
  • ??
  • ????
  • ????//?雙擊的?Recognizer??
  • ????UITapGestureRecognizer*?doubleRecognizer?=?[[UITapGestureRecognizer?alloc]?initWithTarget:selfaction:@selector(DoubleTap:)];??
  • ????doubleRecognizer.numberOfTapsRequired?=?2;?//?雙擊??
  • ????//關鍵語句,給self.view添加一個手勢監測;??
  • ????[self.view?addGestureRecognizer:doubleRecognizer];??
  • ??????
  • ????//?關鍵在這一行,雙擊手勢確定監測失敗才會觸發單擊手勢的相應操作??
  • ????[singleRecognizer?requireGestureRecognizerToFail:doubleRecognizer];??
  • ????[singleRecognizer?release];??
  • ????[doubleRecognizer?release];??
  • }??
  • ??
  • -(void)SingleTap:(UITapGestureRecognizer*)recognizer??
  • {??
  • //處理單擊操作??
  • }??
  • ??
  • -(void)DoubleTap:(UITapGestureRecognizer*)recognizer??
  • {??
  • //處理雙擊操作??
  • }??
  • 三、iphone操作手勢的大概種類

    1.點擊(Tap)
    點擊作為最常用手勢,用于按下或選擇一個控件或條目(類似于普通的鼠標點擊)、

    2.拖動(Drag)
    拖動用于實現一些頁面的滾動,以及對控件的移動功能。

    3.滑動(Flick)
    滑動用于實現頁面的快速滾動和翻頁的功能。

    4.橫掃(Swipe)
    橫掃手勢用于激活列表項的快捷操作菜單

    5.雙擊(Double Tap)
    雙擊放大并居中顯示圖片,或恢復原大小(如果當前已經放大)。同時,雙擊能夠激活針對文字編輯菜單。

    6.放大(Pinch open)
    放大手勢可以實現以下功能:打開訂閱源,打開文章的詳情。在照片查看的時候,放大手勢也可實現放大圖片的功能。

    7.縮小(Pinch close)
    縮小手勢,可以實現與放大手勢相反且對應的功能的功能:關閉訂閱源退出到首頁,關閉文章退出至索引頁。在照片查看的時候,縮小手勢也可實現縮小圖片的功能。

    8.長按(Touch &Hold)
    在我的訂閱頁,長按訂閱源將自動進入編輯模式,同時選中手指當前按下的訂閱源。這時可直接拖動訂閱源移動位置。
    針對文字長按,將出現放大鏡輔助功能。松開后,則出現編輯菜單。
    針對圖片長按,將出現編輯菜單。

    9.搖晃(Shake)
    搖晃手勢,將出現撤銷與重做菜單。主要是針對用戶文本輸入的。

    總結

    以上是生活随笔為你收集整理的手势识别iOS的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。