كيف أقوم بتطبيق UITapGestureRecognizer في تطبيقي

سئل على ٦ يوليو ٢٠١٢  ·  تمت مشاهدة 79k مرة  ·  مصدر

objective_c_pro picture
في ٦ يوليو ٢٠١٢

أنا جديد تمامًا على البرمجة والهدف C. كنت أتساءل عن كيفية إنشاء تطبيق به شاشة فارغة وجهاز توقيت يعمل لمدة دقيقة واحدة. من المفترض أن تنقر بأسرع ما يمكن وأطول فترة ممكنة. كنت أتساءل عن كيفية تنفيذ UITapGestureRecognizer في الكود الخاص بي.

الإجابات

Mathew Varghese picture
في ٦ يوليو ٢٠١٢
98

هذا دليل خطوة بخطوة حول كيفية تنفيذ أدوات التعرف على الإيماءات في فصلك الدراسي:

  1. تطابق فصلك مع بروتوكول UIGestureRecognizerDelegate .

  2. إنشاء أداة التعرف على الإيماءات. على سبيل المثال ، لإنشاء مثيل UITapGestureRecognizer ، سنفعل:

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

    هنا ، الإجراء هو المحدد الذي سيتعامل مع الإيماءة. هنا ، سيبدو مقبض المحدد الخاص بنا TapFrom كما يلي:

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

    وسيطة المحدد هي أداة التعرف على الإيماءات. يمكننا استخدام أداة التعرف على الإيماءات للوصول إلى خصائصها ، على سبيل المثال ، يمكننا العثور على حالة أداة التعرف على الإيماءات ، مثل ، UIGestureRecognizerStateBegan ، UIGestureRecognizerStateEnded ، إلخ.

  3. قم بتعيين الخصائص المطلوبة على أداة التعرف على الإيماءات التي تم إنشاء مثيل لها. على سبيل المثال ، بالنسبة لـ UITapGestureRecognizer ، يمكننا تعيين الخصائص numberOfTapsRequired و numberOfTouchesRequired .

  4. أضف أداة التعرف على الإيماءات إلى العرض الذي تريد اكتشاف الإيماءات الخاصة به. في نموذج الكود الخاص بنا (سأشارك هذا الرمز كمرجع لك) ، سنضيف أدوات التعرف على الإيماءات إلى imageView مع السطر التالي من التعليمات البرمجية:

    [self.imageView addGestureRecognizer:tapGestureRecognizer];
    
  5. بعد إضافة أداة التعرف على الإيماءات إلى العرض ، قم بتعيين المفوض لأداة التعرف على الإيماءات ، أي الفئة التي ستتعامل مع جميع عناصر التعرف على الإيماءات. في نموذج الكود الخاص بنا ، سيكون مثل:

    tapGestureRecognizer.delegate = self;
    

    ملاحظة: قم بتعيين المفوض بعد إضافة أداة التعرف على الإيماءات إلى العرض. خلاف ذلك ، لن يتم استدعاء طريقة الإجراء.

user3098709 picture
في ١٣ ديسمبر ٢٠١٣
16
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
King-Wizard picture
في ١٢ مارس ٢٠١٥
16

المثال في 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.")
        }
    }

}
Matsumoto Kazuya picture
في ٢٣ أبريل ٢٠٢٠
1

يعمل في Xcode 11.4 و Swift 5

class ViewController: UIViewController {

    @IBOutlet weak var targetView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let tap = UITapGestureRecognizer(target: self, action: #selector(self.touchCallback(_:)))
        self.targetView.addGestureRecognizer(tap)
    }

    @objc func touchCallback(_ sender: UITapGestureRecognizer? = nil) {
        if(sender?.state == .ended) {
            print("tapped")
        }
    }
}

// If you want to touch start, available touchesBegan
class ViewController: UIViewController {

    @IBOutlet weak var targetView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
    }


    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
          for touch in touches {
              let location = touch.location(in: targetView)
              print(location)
          }
      }
}
dbbudd picture
في ٢٢ يناير ٢٠١٦
0

إذا كنت تعمل على Swift (iOS9) و SpriteKit ، فجرّب ما يلي.

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")
    }
}