将手势识别器添加到由 PaintCode 创建的 BezierPath

Add gesture recognizer to BezierPath created by PaintCode

我不知道以下情况:

我从 PaintCode 导出了一个 NSObject 并制作了一个 .swift 文件 (someObject.swift)。

public class PlanATrip: NSObject {

    class func drawRectangle1(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 200, height:100), resizing: ResizingBehavior = .aspectFit) {

    ....

}

我还在 UIView (someObjectView.swift) 中覆盖了 draw() 函数。

那么如何将手势识别器添加到 someObject.swift 中的 bezierPath(例如,rectangle1 = UIBezierPath(...))?

我尝试添加一些功能,例如:

let tapGestureA:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(touchAction))

但是,范围让我感到困惑;例如,如果我将 touchAction 函数放在 drawRectangle1 函数之外,我将无法访问 rectangle1.

我该如何修改才能让这样的手势识别器工作?

如果我对你的问题的理解正确,你想添加一个 UITapGestureRecognizer 来识别由 UIBezierPath 定义的部分视图中的手势。

在这种情况下,将选择器分配给问题中的手势识别器,然后在 touchAction(recognizer:) 的主体中,测试手势是否位于 UIBezierPath 内。您只关心手势是否在 UIBezierPath 内部的简单情况可能会按如下方式处理:

func touchAction(recognizer: UITapGestureRecognizer) -> Void {
           guard rectangle1.contains(recognizer.location(in: self)) else { return }

           // Execute your code for the gesture here

           // ...

}

您正在尝试直接操作由 PaintCode 生成的 UIBezierPath 个对象,这不是 PaintCode 的目的。

您尝试实现的目标是可能的,但需要进行一些黑客攻击。
例如:

在我看来,你就是"misusing" PaintCode。

相反,您最好在自定义 UIView 中添加点击逻辑。你叫的东西 someObjectView.swift.
例如:https://github.com/backslash-f/paint-code-ui-button

如果你真的需要检查手势是否发生在 UIBezierPath 的边界内,那么你需要创建一个 public 引用它(例如:一个 var 指向在 drawRectangle1 函数之外)最后使用@Sparky 提出的代码。

这种方法的主要问题是每次使用 PaintCode 的导出功能时,您的更改都会被覆盖。我不推荐它。