0

我不知道以下情况:

NSObject从 PaintCode 导出了一个 .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) {

    ....

}

我还覆盖了(someObjectView.swiftdraw()中的函数。UIView

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

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

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

但是,范围使我感到困惑;就像如果我把 touchAction 功能放在drawRectangle1功能之外,我将无法访问rectangle1.

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

4

2 回答 2

0

如果我正确理解您的问题,您想添加一个 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

           // ...

}
于 2017-09-08T22:11:53.940 回答
0

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

您试图实现的目标是可能的,但并非没有一些黑客行为。
例如:如何访问使用 Paintcode 生成的 UIView 自定义类中的图层?

在我看来,您是在“滥用” PaintCode。

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

如果您确实需要检查手势是否出现在 a 的边界内,UIBezierPath那么您需要创建一个对它的公共引用(例如:var在函数之外指向它的a drawRectangle1),最后使用@Sparky 提出的代码。

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

于 2017-09-09T02:29:44.410 回答