将平移手势限制为设置帧

Posted

技术标签:

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

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

我有一个 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
        
    

【问题讨论】:

【参考方案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。

以上是关于将平移手势限制为设置帧的主要内容,如果未能解决你的问题,请参考以下文章

斯威夫特:如何设置最大/最小平移手势?

将 UIPageViewController(带有 TransitionStyleScroll)平移手势限制到某个区域

如何设置平移手势的 y 轴范围?

UIImageView 上的捏合、平移和双击手势

使用平移手势平滑地更改动画约束

UIScrollView 缩放:将平移限制为 imageView.image 边界