将手势识别器添加到由 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 的导出功能时,您的更改都会被覆盖。我不推荐它。
我不知道以下情况:
我从 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 的导出功能时,您的更改都会被覆盖。我不推荐它。