同时捏合、拖动和平移

Posted

技术标签:

【中文标题】同时捏合、拖动和平移【英文标题】:Pinch, drag and pan at the same time 【发布时间】:2016-12-02 14:26:20 【问题描述】:

我在UIImageView 上有一个标签,如下所示。

标签可拖动、平移和捏合。但是我一次只能做一个手势。例如,我想在捏标签时拖动标签,就像在 Snapchat 和 Whatsapp 中的图像上的文本中一样。我的功能如下。当我搜索时,我认为我应该创建一个自定义手势识别器,但我不知道如何。有什么方法可以在不创建自定义识别器的情况下做到这一点?

在执行此操作时,我从这篇文章中获得了帮助: Snapchat-like text on image

 func handlePan(recognizer: UIPanGestureRecognizer) 
    var translation = recognizer.translation(in: allview)

    translation.x = max(translation.x, imageview.frame.minX - mylabel.frame.minX)
    translation.x = min(translation.x, imageview.frame.maxX - mylabel.frame.maxX)

    translation.y = max(translation.y, imageview.frame.minY - mylabel.frame.minY)
    translation.y = min(translation.y, imageview.frame.maxY - mylabel.frame.maxY)

    if let view = recognizer.view 
        view.center = CGPoint(x:view.center.x + translation.x,
                              y:view.center.y + translation.y)
    
    recognizer.setTranslation(CGPoint.zero , in: view)

func handlePinch(recognizer: UIPinchGestureRecognizer) 
    if let view = recognizer.view as? UILabel 
        let pinchScale: CGFloat = recognizer.scale
        view.transform = view.transform.scaledBy(x: pinchScale, y: pinchScale)
        recognizer.scale = 1.0
    

func handleRotate(recognizer: UIRotationGestureRecognizer) 
    if let view = recognizer.view as? UILabel 
        let rotation: CGFloat = recognizer.rotation
        view.transform = view.transform.rotated(by: rotation)
        recognizer.rotation = 0.0
    

【问题讨论】:

我敢打赌,尝试一次做多个手势是糟糕的设计。如果您考虑普通用户的期望,这听起来令人困惑。 我想像在 snapchat 或 whatsapp(图片上的文字)中那样做。 【参考方案1】:

我通过将“UIGestureRecognizerDelegate”添加到我的 ViewController 来解决。这允许同时使用手势。我确信创建自定义手势会更好,但这也可以。在 viewDidLoad 函数上添加这三行代码

pinchRecognizer.delegate = self
panRecognizer.delegate = self
rotateRecognizer.delegate = self

另外不要忘记为委托添加functin;

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool 
    return true

【讨论】:

以上是关于同时捏合、拖动和平移的主要内容,如果未能解决你的问题,请参考以下文章

手势识别(拖动,旋转,捏合)

如果视图注册平移手势,则捏合手势不起作用

平移手势(按住/拖动)缩放相机,如 Snapchat

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

使用平移、旋转和捏合手势编辑后如何保存 UIImage

UIScrollView 并取消缩放捏合手势