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
cevap
Bu sınıfta jest tanıyıcıları nasıl uygulanacağı konusunda adım kılavuz bir adımdır:
UIGestureRecognizerDelegate
protokolüne sınıfınızı Conform.Hareket tanıyıcıyı örnek olarak uygulayın. Örneğin, bir
İşteUITapGestureRecognizer
örneğini, biz yapacağız: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- örneklenmiş jest tanıyıcı istenen özelliklerini ayarlayın. Örneğin,
UITapGestureRecognizer
içinnumberOfTapsRequired
venumberOfTouchesRequired
özelliklerini ayarlayabiliriz. 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];
, 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.
Maalesef !!! –
Yardımlarınız için çok teşekkürler! –
Üzgün olmak için bir şey yok. Markalama formatlama söz konusu olduğunda bir öğrenme eğrisi vardır. – nhahtdh
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
Ö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.")
}
}
}
Bu doğru, userInteractionEnabled gerekli. Teşekkürler! –
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
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")
}
}
Yardım kendinizi: Uygunsuz formatı için https://github.com/nhahtdh/PS3/blob/master/Game/GameBlock.m – nhahtdh