我有一个自定义UIView,它由9个大小相等的子视图组成。从本质上看就像一个抽搐的脚趾板。
我在这个自定义视图中添加了一个UIPanGestureRecognizer。每次用户在其中一个子视图上平移时,我想要采取一个操作。例如,用户可以在一个手势中浏览前3( 9)个子视图,在本例中,我想采取3个操作。
我可以尝试做一些花哨的数学,并计算出每个子视图的框架,然后找出手势何时从一个子视图交叉到另一个子视图。但是,当一个手势碰到一个新的UIView时,我觉得应该有一种更优雅的方法来获得回调。这样的功能存在吗?
发布于 2018-03-16 05:02:23
通过使用hitTest,我找到了一种更优雅的方法,它在启用用户交互的情况下返回最低的子视图。我将pan手势识别器的回调定义为:
var panSelected = Set<UILabel>()
@objc func handlePan(recognizer: UIPanGestureRecognizer) {
let view = recognizer.view
let loc = recognizer.location(in: view)
if let gridLabel = view?.hitTest(loc, with: nil) as? UILabel {
if !panSelected.contains(gridLabel) {
// my code here
}
}发布于 2018-03-16 05:53:58
尝试使用堆栈视图分组视图具有相同的手势,&使用
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(stackViewTapped))
myStackView.addGestureRecognizer(tapGesture)如果需要实现不同的方法,只需添加另一个堆栈视图即可。
https://stackoverflow.com/questions/49312174
复制相似问题