移动对象,使用多个对象的手势识别器

Move objects around, with gesture recognizer for multiple Objects

我正在尝试制作一个应用程序,您可以在其中使用 Snapchat 和 Instagram 上的贴纸。它完全可以找到一种添加图像的技术,但现在我想要如果你在对象周围滑动对象会改变它的位置(我也想制作缩放/旋转功能)。

我的代码如下所示:

@objc func StickerLaden() {
   for i in 0 ..< alleSticker.count {
        let imageView = UIImageView(image: alleSticker[i])

        imageView.frame = CGRect(x: StickerXScale[i], y:StickerYScale[i], width: StickerScale[i], height: StickerScale[i])

        ImageViewsSticker.append(imageView)
        ImageView.addSubview(imageView)
        imageView.isUserInteractionEnabled = true

        let aSelector : Selector = "SlideFunc"
        let slideGesture = UISwipeGestureRecognizer(target: self, action: aSelector)

        imageView.addGestureRecognizer(slideGesture)
    }
}

func SlideFunc(fromPoint:CGPoint, toPoint: CGPoint) {
}

以下是您需要执行的高级步骤:

  • 向上面有图像的父视图添加一个 UIPanGestureRecognizer
  • 实施 UIGestureRecognizerDelegate 方法来跟踪用户触摸和释放屏幕。
  • 第一次触摸时,循环遍历所有图像并调用 image.frame.contains(touchPoint)。将触摸点下的所有图像添加到数组中。
  • 遍历触摸图像列表,计算触摸点到图像中心的距离。选择中心最接近触摸点的图像。
  • 将所选图像移动到视图堆栈的顶部。 [您现在已经选择了一张图片并使其可见。]
  • 接下来,当您收到平移事件时,相应地更改所选图像的框架。
  • 一旦用户释放屏幕,重置您可能拥有的任何状态变量,以便您可以在下一次触摸完成时重新开始。

以上将为您提供一个很好的 pan 解决方案。需要整理的东西很多,但不是很难。

正如我在评论中所说,scalerotate 非常棘手。我建议您暂时忘记这一点,先实现应用的其他部分。