34

Tôi khá mới đối với lập trình và Mục tiêu C. Tôi đã tự hỏi làm cách nào để tạo một ứng dụng có màn hình trống và hẹn giờ trong một phút. Bạn có nghĩa là để khai thác nhanh như bạn có thể và miễn là bạn có thể cho. Tôi đã tự hỏi làm thế nào để thực hiện các UITapGestureRecognizer vào mã của tôi.Làm cách nào để cài đặt UITapGestureRecognizer vào ứng dụng của tôi

+0

Giúp bản thân: https://github.com/nhahtdh/PS3/blob/master/Game/GameBlock.m – nhahtdh

Trả lời

86

Đây là một hướng dẫn từng bước về cách thực hiện recognizers cử chỉ trong lớp học của bạn:

  1. Phù hợp với lớp học của bạn để UIGestureRecognizerDelegate giao thức.

  2. Khởi tạo trình nhận dạng cử chỉ. Ví dụ, để tạo một UITapGestureRecognizer, chúng tôi sẽ làm:

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

    Ở đây, hành động là bộ chọn mà sẽ xử lý các cử chỉ. Ở đây, bộ xử lý chọn của chúng tôiTapFrom sẽ trông giống như sau:

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

    Đối số cho bộ chọn là bộ nhận dạng cử chỉ. Chúng tôi có thể sử dụng trình nhận dạng cử chỉ này để truy cập các thuộc tính của nó, ví dụ: chúng tôi có thể tìm trạng thái của trình nhận dạng cử chỉ, như UIGestureRecognizerStateBegan, UIGestureRecognizerStateEnded, v.v.

  3. Đặt thuộc tính mong muốn trên trình nhận dạng cử chỉ tức thời. Ví dụ: đối với số UITapGestureRecognizer, chúng tôi có thể đặt các thuộc tính numberOfTapsRequirednumberOfTouchesRequired.

  4. Thêm trình nhận dạng cử chỉ vào chế độ xem bạn muốn phát hiện cử chỉ. Trong mẫu mã của chúng tôi (Tôi sẽ chia sẻ rằng mã để bạn tham khảo), chúng tôi sẽ bổ sung thêm recognizers cử chỉ đến một IMAGExem với dòng mã sau đây:

    [self.imageView addGestureRecognizer:tapGestureRecognizer]; 
    
  5. Sau khi thêm bộ nhận dạng cử chỉ để xem, thiết lập ủy nhiệm cho trình nhận dạng cử chỉ, tức là lớp sẽ xử lý tất cả các công cụ nhận dạng cử chỉ. Trong mã mẫu của chúng tôi, nó sẽ như thế nào:

    tapGestureRecognizer.delegate = self; 
    

    Lưu ý: Gán các đại biểu sau khi thêm bộ nhận dạng cử chỉ để xem. Nếu không, phương thức hành động sẽ không được gọi.

+0

Xin lỗi vì định dạng không phù hợp !!! –

+0

Cảm ơn bạn rất nhiều vì đã giúp đỡ! –

+2

Không có gì phải xin lỗi. Có một đường cong học tập khi nói đến định dạng đánh dấu xuống. – 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

Ví dụ trong Swift:

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

Đúng vậy, userInteractionEnabled là điều cần thiết. Cảm ơn! –

+0

Tôi không hiểu tại sao cần phải kiểm tra "recognizer.state == UIGestureRecognizerState.Ended". Tôi đã thử nghiệm điều này và nó hoạt động mà không có nó là tốt. Giả định của tôi là bạn cần nó để nhận dạng cử chỉ đa chạm nhưng chỉ với một lần chạm, chúng ta vẫn cần nó? – plam4u

0

Nếu bạn đang làm việc Swift (iOS9) và SpriteKit, hãy thử những điều sau đây.

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") 
    } 
} 
Các vấn đề liên quan