Swift:获取 UIPanGestureRecognizer 的目标

Posted

技术标签:

【中文标题】Swift:获取 UIPanGestureRecognizer 的目标【英文标题】:Swift: Getting target of UIPanGestureRecognizer 【发布时间】:2015-06-25 22:51:35 【问题描述】:

在我的 ViewController.swift 中,我有一个包含自定义 UIViews 的数组。每次创建一个时,我都会像这样向它添加一个 UIPanGestureRecognizer:

var panRecognizer = UIPanGestureRecognizer(target: self, action: "detectPan:")
newCard.gestureRecognizers = [panRecognizer]

这链接到我的 detectPan(recognizer: UIPanGestureRecognizer) 函数,该函数处理运动。但是,由于我有多个对象链接到该函数,我不确定如何确定输入来自哪一个。

我可以使用类似(不存在的)recognizer.target 的东西吗?我应该只处理每个自定义 UIView 中的平移吗?

任何帮助将不胜感激!

【问题讨论】:

recognizer 参数是被激活的识别器。如果你有不止一个,你可以比较它来找出你从哪一个接收事件。 这样的东西有用吗? if(recognizer == customViewArray[0].gestureRecognizers[0]) println("First view has been panned") 它想让我做customViewArray[0].gestureRecognizers[0] as! NSObject,但不管有没有它都不起作用。 【参考方案1】:

首先,您应该使用let 声明您的panRecognizer

let panRecognizer = UIPanGestureRecognizer(target: self, action: "detectPan:")

其次,您不应该设置任何UIViewgestureRecognizers 属性。这是不好的做法,因为 UIKit 可能已经在幕后向该视图添加了自己的手势识别器。如果您随后通过将 [panRecognizer] 分配给该属性来删除这些识别器,则可能会出现意外行为。要添加平移手势识别器,请执行以下操作:

newCard.addGestureRecognizer(panRecognizer)

然后,在您的 detectPan(recognizer: UIPanGestureRecognizer) 方法中,您可以使用以下代码检测哪个 UIView 被平移:

func detectPan(recognizer: UIPanGestureRecognizer) 
    switch recognizer.view 
    case self.customViewArray[0]:
        // do something
    case self.customViewArray[1]:
        // do something else
    case ... :
    // ...

【讨论】:

感谢您的精彩回答!你提供的比我需要的还要多。 @user2696186 不客气。我很高兴能帮上忙。

以上是关于Swift:获取 UIPanGestureRecognizer 的目标的主要内容,如果未能解决你的问题,请参考以下文章

swift Swift - CloudKit - 谓词来获取用户

swift Swift - CloudKit - 获取用户ID

swift Swift - CloudKit - 获取多个记录

swift Swift - CloudKit:获取记录

swift 使用swift获取数据使用情况

swift 在swift中获取内部函数指针