任何人都可以澄清这两种触发视图时触发功能的方法之间的区别吗?
1)
myView.addTarget(self, action: #selector(myFunctionToTrigger(_:)), forControlEvents: UIControlEvents.TouchUpInside)
2)
let tapGesture = UITapGestureRecognizer(target: self, action:
#selector(myFunctionToTrigger(_:)))
myView.addGestureRecognizer(tapGesture)
答案 0 :(得分:4)
这是在iOS应用中实现用户事件处理的两种完全不同的方式。
1)。 addTarget()
- 是UIControl
类的方法,它是目标 - 行动机制的一部分。有关documentation中的更多信息。
您不能addTarget
任何UIView
,只能UIControl
个子类。
2)。 UIGestureRecognizer
子类只是一种检测和区分特定视图上的用户手势的机制。
Gesture Recognizers可以检测更复杂的事件(如滑动或捏合或缩放)之间的主要区别,但-addTarget
是检测用户活动的有效方法,它也为所有{{1}提供相同级别的界面例如UIControl
,UISegmetedControl
等
希望我帮助过你。
答案 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有几个好处:
除了上面的好处之外,我认为它更像是UIControl元素的编码约定。