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