为什么 bringSubviewToFront() 只适用于平移,而不适用于点击?

why is bringSubviewToFront() only working for panning, not tapping?

view.bringSubviewToFront(tappedView)

在我拖动(平移)视图时有效,但在我点击它们时无效。我的问题是,当我将一个视图叠加在另一个视图上时,我希望底部视图在点击时出现在前面。目前它只会在拖动时出现在前面。我需要一些额外的代码来做到这一点吗?谢谢

以下是我的代码的摘录以获取更多上下文:

@objc func didPan(_ recognizer: UIPanGestureRecognizer) {
        let location = recognizer.location(in: self.view)
            switch recognizer.state {
            case .began:
                currentTappedView = moviePieceView.filter { pieceView -> Bool in
                    let convertedLocation = view.convert(location, to: pieceView)
                    return pieceView.point(inside: convertedLocation, with: nil)
                    }.first
                currentTargetView = movieTargetView.filter { [=11=].pieceView == currentTappedView }.first
            case .changed:
                guard let tappedView = currentTappedView else { return }
                let translation = recognizer.translation(in: self.view)
                tappedView.center = CGPoint(x: tappedView.center.x + translation.x, y: tappedView.center.y + translation.y)
                recognizer.setTranslation(.zero, in: view)
                view.bringSubviewToFront(tappedView)
    ```

我遇到了同样的问题,我是这样解决的:

Add a gestureRecognizer to your view and put this in your code. Don't forget to set the delegate as well when attaching this to the code!

@IBAction func tappedView1(recognizer: UITapGestureRecognizer) {
        view.bringSubviewToFront(myView)
    }

Put this in your viewDidLoad:

  let tap = UITapGestureRecognizer(target: self, action: #selector(tappedView1))
        tap.cancelsTouchesInView = false
        self.view.addGestureRecognizer(tap)

如果您想通过 panGesture 执行此操作,请查看我的

谢谢大家。当我除了 didPan().

还写了第二个函数时它起作用了

这是附加代码:

    override func viewDidLoad() {
        super.viewDidLoad()
        configureLabel()

        let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(didPan(_:)))
        view.addGestureRecognizer(panGestureRecognizer)

        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTap(_:)))
            view.addGestureRecognizer(tapGestureRecognizer)
    }

    @objc func didTap(_ recognizer: UITapGestureRecognizer) {
        let location = recognizer.location(in: self.view)
        currentTappedView = moviePieceView.filter { pieceView -> Bool in
            let convertedLocation = view.convert(location, to: pieceView)
            return pieceView.point(inside: convertedLocation, with: nil)
            }.first
        guard let tappedView = currentTappedView else { return }
        view.bringSubviewToFront(tappedView)
    }

但是,我发现如果您不想以编程方式执行此操作,也可以在图像视图中勾选 "User Interaction Enabled" 框。