4

任何人都可以在点击视图时澄清这两种触发功能的方式之间的区别吗?

1) myView.addTarget(self, action: #selector(myFunctionToTrigger(_:)), forControlEvents: UIControlEvents.TouchUpInside)

2) let tapGesture = UITapGestureRecognizer(target: self, action: #selector(myFunctionToTrigger(_:))) myView.addGestureRecognizer(tapGesture)

4

5 回答 5

6

这是在 iOS 应用程序中实现用户事件处理的两种完全不同的方式。

1)。addTarget()- 是UIControl类上的方法,它是目标动作机制的一部分。更多关于文档的内容。

而且你不能addTargettot any UIView,只能是UIControl子类。

2)。UIGestureRecognizer子类只是一种简单的机制来检测和区分特定视图上的用户手势。

它们之间的主要区别在于,手势识别器可以检测更复杂的事件,如滑动、捏合或缩放,但-addTarget它是一种更有效的检测用户活动的方法,它还为所有UIControls 提供相同级别的界面,例如UISegmetedControl,UISlider等。

希望我对你有所帮助。

于 2016-08-24T13:46:07.393 回答
1

这两种方法在两个不同的抽象级别上工作:

  • addTarget:action:forControlEvents是提供隔离事件的较低级别。必须组合和解释其中几个事件以检测更复杂的手势,例如滑动或捏合。
  • addGestureRecognizer在更接近应用程序通常需要的更高级别上工作。它添加了特定的手势识别器,用于侦听低级事件、检测手势并提供有关手势的特定信息。

在水龙头的情况下,差异很小。但是当涉及到滑动、捏合以及轻敲、滑动、捏合的组合(例如在图像查看器或地图应用程序中)时,一个或多个手势识别器是可行的方法。

于 2016-08-24T13:52:15.850 回答
0

Pavel 的回答是正确的,您只能将目标添加到 UIControlView,它是 UIView 的子类。UIGestureRecognizer 可以添加到任何 UIView。

Codo关于目标比手势低级别的回答是错误的,手势是较低级别的触摸支持。UIControl 使用手势使 addTarget:action:forControlEvents 工作。

于 2017-05-24T20:03:35.397 回答
0

这是区别

因为UITapGestureRecognizer您可以为指定的手势添加事件,例如 UITapGestureRecognizer,UIPanGestureRecognizer... 和许多其他手势。

至于UIView addTarget()你可以为指定事件添加目标,如UIControlEvents.TouchUpInside.. 和许多其他事件。

于 2016-08-24T13:49:36.317 回答
0

addTarget 有几个好处:

  1. 它是一个内置函数。你不需要初始化另一个对象来做同样的事情。
  2. 您可以设置何时对操作做出反应:“touchUpInside”或“touchDown”(或滑块的“valueChanged”)。
  3. 您可以设置按钮的不同外观(例如标题文本、标题颜色、内容图像、背景图像、高亮色调),并且如果使用 addTarget,按钮只会显示这些状态。

除了上述好处之外,我认为它更像是 UIControl 元素的编码约定。

于 2018-02-05T09:24:39.350 回答