34

Programlama ve Object C için oldukça yeniyim. Boş bir ekran ve bir dakika süren bir zamanlayıcı içeren bir uygulamayı nasıl yapacağımı merak ediyordum. Mümkün olduğu kadar çabuk dokunursunuz. UITapGestureRecognizer kodunu koduma nasıl uygulayacağımı merak ediyordum.UITapGestureRecognizer'ı uygulamamın içine nasıl uygularım

+0

Yardım kendinizi: Uygunsuz formatı için https://github.com/nhahtdh/PS3/blob/master/Game/GameBlock.m – nhahtdh

cevap

86

Bu sınıfta jest tanıyıcıları nasıl uygulanacağı konusunda adım kılavuz bir adımdır:

  1. UIGestureRecognizerDelegate protokolüne sınıfınızı Conform.

  2. Hareket tanıyıcıyı örnek olarak uygulayın. Örneğin, bir UITapGestureRecognizer örneğini, biz yapacağız:

    İşte
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)]; 
    

    , aksiyon jest idare edecek seçicidir.

    - (void) handleTapFrom: (UITapGestureRecognizer *)recognizer 
    { 
        //Code to handle the gesture 
    } 
    

    seçicinin argüman jest tanıyıcı geçerli: gibi Burada, bizim seçici handleTapFrom bir şey olacaktır. Biz vb UIGestureRecognizerStateBegan, UIGestureRecognizerStateEnded gibi, örneğin, biz jest tanıyıcı durumunu bulabilirsiniz özelliklerini erişmek için bu jest tanıyıcı kullanabilirsiniz

  3. örneklenmiş jest tanıyıcı istenen özelliklerini ayarlayın. Örneğin, UITapGestureRecognizer için numberOfTapsRequired ve numberOfTouchesRequired özelliklerini ayarlayabiliriz.

  4. Hareket algılayıcısını, hareketleri algılamak istediğiniz görünüme ekleyin. Bizim örnek kodda, biz aşağıdaki kod satırı ile bir imageView için jest tanıyıcıları katacak (Ben referans için bu kodu paylaşımı olacak): görünümüne jest tanıyıcı ekledikten sonra

    [self.imageView addGestureRecognizer:tapGestureRecognizer]; 
    
  5. , set jest tanıyıcı için temsilci, yani tüm jest tanıyıcı şeyler idare edecek sınıf.

    tapGestureRecognizer.delegate = self; 
    

    Not: görünümüne jest tanıyıcı ekledikten sonra temsilci atama örnek kodumuzu, bu gibi olurdu. Aksi takdirde, işlem yöntemi çağrılmayacak.

+0

Maalesef !!! –

+0

Yardımlarınız için çok teşekkürler! –

+2

Üzgün ​​olmak için bir şey yok. Markalama formatlama söz konusu olduğunda bir öğrenme eğrisi vardır. – nhahtdh

11
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; 
[self.tableView addGestureRecognizer:gestureRecognizer]; 
self.tableView.userInteractionEnabled = YES; 
gestureRecognizer.cancelsTouchesInView = NO; // this prevents the gesture recognizers to 'block' touches 
9

Örnek Swift yılında: Eğer Swift (iOS9) ve SpriteKit çalışıyorsanız

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var myUIImageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let singleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "myUIImageViewTapped:") 
     singleTap.numberOfTapsRequired = 1 
     singleTap.numberOfTouchesRequired = 1 
     self.myUIImageView.addGestureRecognizer(singleTap) 
     self.myUIImageView.userInteractionEnabled = true 
    } 

    func myUIImageViewTapped(recognizer: UITapGestureRecognizer) { 
     if(recognizer.state == UIGestureRecognizerState.Ended){ 
      println("myUIImageView has been tapped by the user.") 
     } 
    } 

} 
+2

Bu doğru, userInteractionEnabled gerekli. Teşekkürler! –

+0

Neden "recognizer.state == UIGestureRecognizerState.Ended" için kontrol edilmesi gerektiğini anlamıyorum. Bunu test ettim ve onsuz da çalışır. Benim varsayımım, çok dokunuşlu hareket algılayıcısı için ihtiyacınız var ama tek bir dokunuş için hala buna ihtiyacımız var mı? – plam4u

0

aşağıdakileri deneyin.

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     let singleTap = UITapGestureRecognizer(target:self, action:#selector(self.handleSingleTap:)) 
     singleTap.numberOfTouchesRequired = 1 
     singleTap.addTarget(self, action:#selector(self.handleSingleTap)) 
     view.userInteractionEnabled = true 
     view.addGestureRecognizer(singleTap) 
    } 
    //event handler 
    func handleSingleTap(sender:UITapGestureRecognizer){ 
     print("tapped") 
    } 
} 
İlgili konular