UITapGestureRecognizer和addTarget之间的区别

时间:2016-08-24 13:25:36

标签: ios uitapgesturerecognizer addtarget

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

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

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

5 个答案:

答案 0 :(得分:4)

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

1)。 addTarget() - 是UIControl类的方法,它是目标 - 行动机制的一部分。有关documentation中的更多信息。

您不能addTarget任何UIView,只能UIControl个子类。

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

Gesture Recognizers可以检测更复杂的事件(如滑动或捏合或缩放)之间的主要区别,但-addTarget是检测用户活动的有效方法,它也为所有{{1}提供相同级别的界面例如UIControlUISegmetedControl

希望我帮助过你。

答案 1 :(得分:1)

这两种方法适用于两种不同的抽象层次:

  • addTarget:action:forControlEvents是提供隔离事件的较低级别。必须组合并解释其中一些事件,以检测更复杂的手势,如滑动或捏合。
  • addGestureRecognizer在更接近应用通常需要的位置工作。它添加了特定的手势识别器,可以监听低级事件,检测手势并提供有关手势的特定信息。

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

答案 2 :(得分:0)

这是差异

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

对于UIView addTarget(),您可以为指定的事件添加目标,例如UIControlEvents.TouchUpInside ..以及许多其他事件。

答案 3 :(得分:0)

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

Codo的回答是目标比手势低,手势是错误的,手势是较低级别的触摸支持。 UIControl使用手势来生成addTarget:action:forControlEvents work。

答案 4 :(得分:0)

addTarget有几个好处:

  1. 这是一个内置功能。您不需要初始化另一个对象来执行相同的操作。
  2. 您可以设置何时对操作做出反应:“touchUpInside”或“touchDown”(或滑块的“valueChanged”)。
  3. 您可以设置按钮的不同外观(例如标题文本,标题颜色,内容图像,背景图像,高亮色调),如果使用addTarget,按钮仅显示这些状态。
  4. 除了上面的好处之外,我认为它更像是UIControl元素的编码约定。