iOSジェスチャー操作UIGestureRecognizer

4745 ワード

一、概説
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を使用する比較的簡単な方法を提供した.
二、UIGestureRecognizerUIGestureRecognizer は抽象クラスで、主にそのサブクラスを使用しています(名前にはリンクが含まれています.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のヘッダファイルにを付けておくことを忘れないでください.
    しかし、いくつかのジェスチャーは関連していますが、どうすればいいですか?例えば、TapとLongPress、SwipeとPan、またはTapは一度にTapと2回です.
    ジェスチャー認識は、クリックとダブルクリックなどの反発の原則を有し、ジェスチャーが認識されると、その後のジェスチャーは認識されません.したがって、関連ジェスチャーについては、プログラムの選別を助けるために特殊な処理を行い、現在のジェスチャーをどのジェスチャーにまとめるべきかを説明します.
    たとえば、クリックとダブルクリックが併存する場合、処理を行わないと、クリックしたメッセージしか送信されません.ダブルクリックジェスチャーを認識するためには、ジェスチャーがダブルクリックであるか否かを判断し、ダブルクリックが無効な場合にクリックジェスチャーとして処理する特殊な処理ロジックが必要である.使用
    [A r e q u i r e G e s t ureRecognizerToFail: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.スイープジェスチャーリスト項目をアクティブにするためのショートカットメニュー
    5.ダブルクリック(Double Tap)ダブルクリックで拡大して中央に画像を表示するか、元のサイズに戻します(現在拡大している場合).同時に、ダブルクリックすると、テキスト編集メニューがアクティブになります.
    6.拡大(Pinch open)拡大ジェスチャーは、購読ソースを開き、文章の詳細を開く機能を実現します.写真を見るときは、拡大ジェスチャーで画像を拡大する機能も実現します.
    7.縮小(Pinch close)縮小ジェスチャーは、拡大ジェスチャーとは逆の機能を実現することができる:サブスクリプションソースを閉じてトップページに終了し、文章を閉じてインデックスページに終了する.写真を見るときは、ジェスチャーを小さくして画像を縮小する機能も実現します.
    8.長押し(Touch&Hold)私のサブスクリプションページで、長押しサブスクリプションソースは自動的に編集モードに入り、現在押しているサブスクリプションソースを指で選択します.この場合、サブスクリプションソースを直接ドラッグして位置を移動できます.テキストを長押しすると、拡大鏡補助機能が表示されます.放すと、編集メニューが表示されます.画像を長押しすると、編集メニューが表示されます.
    9.Shake(Shake)ジェスチャーを揺らすと、取り消しとやり直しメニューが表示されます.主にユーザテキストに対して入力されます.