Ios 用手指移动轻拍手势

Ios 用手指移动轻拍手势,ios,swift,event-handling,uitapgesturerecognizer,Ios,Swift,Event Handling,Uitapgesturerecognizer,据我观察,轻触手势会在手指移动时取消该事件。以下是《事件处理指南》的屏幕截图: 我已经用下面的代码做了一些测试。不,它取消了 @IBAction func dosomething(sender: UITapGestureRecognizer) { //called by gesture recognizer } @IBOutlet var red: UIView! @IBOutlet var green: UIVi

据我观察,轻触手势会在手指移动时取消该事件。以下是《事件处理指南》的屏幕截图:

我已经用下面的代码做了一些测试。不,它取消了

    @IBAction func dosomething(sender: UITapGestureRecognizer) {
         //called by gesture recognizer   
        }
        @IBOutlet var red: UIView!
        @IBOutlet var green: UIView!

        @IBOutlet var yellow: UIView!

        @IBOutlet var white: UIView!

        //setting delegate when outlet get set.
        @IBOutlet var tapGesture: UITapGestureRecognizer! { didSet { outlet.delegate = self
            }}
        //delegate func shouldReceiveTouch
        func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
            if touch.view == red {
                println("ez")
                return true
            }else if touch.view == green{
                println("bp")
                return false
            }else { view.backgroundColor = UIColor.clearColor()
                return true}
        }


所以如果我是对的,当调用
touchesMoved:
时,
tapGestureRecognizer
一定失败了,但根据图,它没有失败。这里我遗漏了什么?

在iPhone应用程序中,当用户在屏幕上轻触或拖动手指时,会发生两件事:

  • 视图接收一个
    UITouch
    对象
  • UIGestureRecognitor
    可能会抓取
    UITouch
    对象,并尝试推断用户正在做什么(向内/向外平移、向上/向下滚动、在浏览器中的页面之间滑动等)
  • 除非用户完成了对屏幕的点击,否则
    UIgestureRecognitor
    将不知道用户在做什么。当
    UITouch
    对象不再位于当前视图之外时,iPhone将知道用户何时完成操作

    问题是,
    uigesturecognizer
    不会“失败”,而是在用户的触摸被“取消”或不在视图之外之前,它没有任何价值或意义。图1-6右侧的第四列可以看出这一点。另一个问题是水龙头不是你想象的那样。只需轻轻一碰。触摸一开始就结束了。如果您试图在屏幕上滑动或拖动某个对象,则需要一个不同的
    UIGestureRecognitor
    对象,例如
    UIPangestureRecognitor
    UILongPressGestureRecognitor
    UIWipeGestureRecognitor

    如果要查看此操作,请尝试在iOS单视图应用程序中执行以下操作:

  • 制作一个
    ViewController.swift
    文件
  • 将您的
    ViewController
    分类为
    UIViewController
    的子类
  • 添加
    UIgestureRecognitizerDelegate
    协议
  • 添加一些
    UITapGestureRecognizer
    对象和
    UITouch
    对象,并将它们链接到情节提要中的单个视图
  • uigesturecognizer
    对象的
    委托
    设置为
    UIViewController
    self
  • 通过在
    touchesbeated:withEvent:
    touchesMoved:withEvent:
    touchesend:withEvent
    touchescanceled:withEvent
    方法中添加一些
    println
    语句来检查触摸的开始和结束时间

  • 您可以直接在中了解这些方法的工作原理。

    感谢您的关注。我认为你所说的对于一般的UIgestureRecognitor对象是正确的。但说到UITapGestureRecognitizer,当我移动手指时,TapSignature似乎被取消了。在提问之前,我已经做了一些测试。我仍然不清楚:|在我列出你应该尝试的东西的段落之前,我对我的答案进行了编辑。主要的想法是,你的轻拍手势只接受轻拍式的行为。你不能简单地按住水龙头,期望它不会取消。你需要另一种UIgestureRecognitor对象,它允许用户按住鼠标点击和/或在屏幕上拖动鼠标。我已经用我尝试过的方法编辑了我的问题。我同意你到目前为止所写的一切。我不是故意要实现一些代码。我只是跟着导游走。在这里,苹果椅子人似乎犯了一个错误,在桌子上写了“tapGestureRecognizer”,而不是“GestureRecognizer”,顺便说一句,这是一个有用的答案。