【问题标题】:Limiting Pan Gesture to a Set Frame将平移手势限制为设置帧
【发布时间】:2019-03-06 15:05:32
【问题描述】:

我已经在 StackOverflow 上搜索了几天,但没有一个有效的答案。

我有一个 UIImageView,我正在尝试在其中移动标签。现在我可以移动标签,但它超出了 UIImageView 的范围。

到目前为止,这是我的平移手势代码:

var initialCenter = CGPoint()

    @objc func userDragged(pan: UIPanGestureRecognizer) {

        guard let senderView = pan.view else { return }
        guard let parentView = senderView.superview else { return }

        let translation = pan.translation(in: imageHolder)

        if pan.state == .began {
            self.initialCenter = senderView.center
            print(self.initialCenter)
        }

        // update the position.
        if pan.state == .changed {

            let newCenter = CGPoint(x: initialCenter.x + translation.x, y: initialCenter.y + translation.y)
            senderView.center = newCenter

        } else if pan.state == .ended || pan.state == .cancelled {

            print("ended or cancelled")

            let finalCenter = CGPoint(x: senderView.center.x, y: senderView.center.y)
            senderView.center = finalCenter
        } else {
            senderView.center = initialCenter
        }
    }

【问题讨论】:

    标签: swift uipangesturerecognizer


    【解决方案1】:

    您可能需要在此处将标签添加到 imageView。

      override func viewDidAppear(_ animated: Bool) {
        // imageHolder is UIImageView.
    
        imageHolder.clipsToBounds = true
        imageHolder.backgroundColor = UIColor.black
    
        //the label is called labelView here
    
          imageHolder.addSubview(self.labelView)
          imageHolder.isUserInteractionEnabled = true
         self.labelView.isUserInteractionEnabled = true
    
    
    }
    

    【讨论】:

    • 刚试过这个,不幸的是它甚至不允许我移动标签。一旦我将它添加回 UIView,它就可以让我移动它,但在图像和屏幕本身的范围之外。
    • 您的标签是否与 labelView 链接?
    • 还有其他的inageview吗?这里的image holder是唯一的uiimageview
    • 这是视图的层次结构: UIViewController -> UIView *imageHolder -> UIImageView *imageView -> UIView *contentHolder -> UILabel *label 也许这可能有助于可视化。
    • 你应该让它变得简单,所有的 UILabel 和 UIImageView 都应该有 isUserInteractionEnabled = true。
    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2019-07-12
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多