ios - 如何为未知数量的 subview 设置手势识别器

标签 ios swift uigesturerecognizer uipangesturerecognizer

我有一个名为 mainCanvasView 的主视图,我在其中符合 UIGestureRecognizerDelegate 并按如下方式设置了平移手势:

    let panGesture = UIPanGestureRecognizer(target: self, action:#selector(self.handlePanGesture(gesture:)))
    self.mainCanvasView.addGestureRecognizer(panGesture)  


    func handlePanGesture(gesture: UIPanGestureRecognizer) {
        if gesture.state == UIGestureRecognizerState.began || gesture.state == UIGestureRecognizerState.changed{
            let translation = gesture.translation(in: view)
            gesture.view?.transform = (gesture.view?.transform)!.translatedBy(x: translation.x, y: translation.y)
            gesture.setTranslation(CGPoint(x: 0, y: 0), in: view)
        }
    }

目前,结果看起来是这样的:

我的目标是不是平移mainCanvasView,而是平移用户可能添加到mainCanvasView 的后续 subview 。我知道我不应该向添加到 mainCanvasView 的每个新 subview 添加平移手势。我如何才能检测到手势在我的 mainCanvasView 中平移的顶部 subview ?

当前无法正常工作的示例:

enter image description here

最佳答案

你应该在所有 subview 中做手势,因为如果 subview 移出主容器 View 的边界,则没有手势会作用于它。您可以创建全高和前面的主视图,或者在添加为 subview 时向它的每个 subview 添加手势。

我仍然在创建灰色主视图和白色 View 是它的 subview 的地方发布代码

这是我的解决方案

你需要的是找到在平移手势期间被触摸的 subview

我创建了 DEMO,其中我创建了一个包含 3 个 subview 的主视图(如果您有图像,请确保启用用户交互)

func handlePanGesture(gesture: UIPanGestureRecognizer) {

    if gesture.state == UIGestureRecognizerState.began || gesture.state == UIGestureRecognizerState.changed {

        var viewNew = UIView(frame: view.frame)

        for view in self.viewMain.subviews {
            let point = gesture.location(in: view)
            if (view.hitTest(point, with: nil) != nil) {
                viewNew = view
                break

            } else {
                print("Not Tapped")
            }
        }

        print("View Tapped")


        let translation = gesture.translation(in: view)
        viewNew.transform = (viewNew.transform).translatedBy(x: translation.x, y: translation.y)
        gesture.setTranslation(CGPoint(x: 0, y: 0), in: viewNew)




    }
}

enter image description here

关于ios - 如何为未知数量的 subview 设置手势识别器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47194221/

相关文章:

ios - ios如何在微信中接收消息?

ios - 当数据改变时如何调用函数?

ios - 使用自动布局向 UIButton 添加 subview

ios - Swift 中指针的替代品?

ios - 如何为 sprite kit 节点组合图像

ios - 重新创建或更新配置文件后是否需要更新?

swift - 如何让 Freddy 在 Swift 中使用 AlamoFire?

ios - 在 FBLoginView 中制作按钮 touchUp

ios - 在 SwiftUI 中处理双重和三重手势识别器

ios - touchesEnded 或 touchesCancelled 并不总是被调用