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

时间:2017-09-08 20:47:05

标签: ios swift swift3 paint-code

我不知道以下情况:

我从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) {

    ....

}

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

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

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

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

然而,范围使我困惑;就像我将touchAction函数放在drawRectangle1函数之外一样,我将无法访问rectangle1

如何修改以使这样的手势识别器工作?

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您需要添加一个UITapGestureRecognizer,它会识别由UIBezierPath定义的视图的一部分中的手势。

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

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

           // Execute your code for the gesture here

           // ...

}

答案 1 :(得分:0)

您正试图直接操纵PaintCode生成的UIBezierPath个对象,这不是PaintCode的目的。

你想要实现的目标是可能的,但并非没有一些黑客攻击 例如:How to access a layer inside UIView custom class generate with Paintcode?

在我看来,你是"滥用" PaintCode。

相反,您可以更好地在自定义UIView中添加点按逻辑。你称之为someObjectView.swift的事 例如:https://github.com/backslash-f/paint-code-ui-button

如果您确实需要检查手势是否发生在UIBezierPath的边界内,那么您需要创建一个公开引用(例如:var指向{ {1}}函数)最后使用@Sparky提出的代码。

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