Swift 3 中的可扩展 UIBezier
Scaleable UIBezier in Swift 3
我正在尝试设计一个可扩展的 UIBezier
。
这是我的Swift代码:
@IBDesignable
class AnimatedRingView: UIView {
override func draw(_ rect: CGRect) {
//// Color Declarations
let strokeColor = UIColor(red: 1.000, green: 0.706, blue: 0.004, alpha: 1.000)
//// bezier Drawing
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 48.93, y: 266.07))
bezierPath.addCurve(to: CGPoint(x: 48.93, y: 53.93), controlPoint1: CGPoint(x: -9.64, y: 207.49), controlPoint2: CGPoint(x: -9.64, y: 112.51))
bezierPath.addCurve(to: CGPoint(x: 261.07, y: 53.93), controlPoint1: CGPoint(x: 107.51, y: -4.64), controlPoint2: CGPoint(x: 202.49, y: -4.64))
bezierPath.addCurve(to: CGPoint(x: 261.07, y: 266.07), controlPoint1: CGPoint(x: 319.64, y: 112.51), controlPoint2: CGPoint(x: 319.64, y: 207.49))
bezierPath.addLine(to: CGPoint(x: 261.07, y: 266.07))
bezierPath.lineCapStyle = .round;
bezierPath.lineJoinStyle = .round;
strokeColor.setStroke()
bezierPath.lineWidth = 10
bezierPath.stroke()
}
}
这是结果:
我的问题:
为了节省时间,我通过 PaintCode 创建了 UIBezierPath
:
正如您在上面看到的,我们有一个 宽度和高度 用于 UIBezierPath
,但是,代码显示点 UIBezierPath
。 ..
如何创建大小变量以通过自动识别 UIBezierPath
的点的代码(或检查器)赋值?
这可能吗?需要帮助!
假设您创建了一个圆弧,为此目的使用贝塞尔曲线似乎有点过分了。
有了UIBezierPath,你可以使用这个功能:
func addArcWithCenter(_ center: CGPoint,
radius 半径:CGFloat,
startAngle startAngle: CGFloat,
endAngle endAngle:CGFloat,
顺时针方向:Bool)
并设置一个半径,以及必要的开始和结束角度。
如果你真的必须为此目的使用三次贝塞尔曲线,你应该使用等于 0.5522847498 的幻数 kappa,这是由三次贝塞尔曲线构建的圆的控制点。
我已经在我的网站上放置了一个我所描述内容的小演示:
http://www.trilithon.com/download/AnimatedRingView.zip
希望对您有所帮助。
Bezier 对象不支持将变量附加到它们的维度,但您可以使用具有自定义 start/end 角度的 Oval 对象.
—PaintCode 支持
我正在尝试设计一个可扩展的 UIBezier
。
这是我的Swift代码:
@IBDesignable
class AnimatedRingView: UIView {
override func draw(_ rect: CGRect) {
//// Color Declarations
let strokeColor = UIColor(red: 1.000, green: 0.706, blue: 0.004, alpha: 1.000)
//// bezier Drawing
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 48.93, y: 266.07))
bezierPath.addCurve(to: CGPoint(x: 48.93, y: 53.93), controlPoint1: CGPoint(x: -9.64, y: 207.49), controlPoint2: CGPoint(x: -9.64, y: 112.51))
bezierPath.addCurve(to: CGPoint(x: 261.07, y: 53.93), controlPoint1: CGPoint(x: 107.51, y: -4.64), controlPoint2: CGPoint(x: 202.49, y: -4.64))
bezierPath.addCurve(to: CGPoint(x: 261.07, y: 266.07), controlPoint1: CGPoint(x: 319.64, y: 112.51), controlPoint2: CGPoint(x: 319.64, y: 207.49))
bezierPath.addLine(to: CGPoint(x: 261.07, y: 266.07))
bezierPath.lineCapStyle = .round;
bezierPath.lineJoinStyle = .round;
strokeColor.setStroke()
bezierPath.lineWidth = 10
bezierPath.stroke()
}
}
这是结果:
我的问题:
为了节省时间,我通过 PaintCode 创建了 UIBezierPath
:
正如您在上面看到的,我们有一个 宽度和高度 用于 UIBezierPath
,但是,代码显示点 UIBezierPath
。 ..
如何创建大小变量以通过自动识别 UIBezierPath
的点的代码(或检查器)赋值?
这可能吗?需要帮助!
假设您创建了一个圆弧,为此目的使用贝塞尔曲线似乎有点过分了。
有了UIBezierPath,你可以使用这个功能:
func addArcWithCenter(_ center: CGPoint, radius 半径:CGFloat, startAngle startAngle: CGFloat, endAngle endAngle:CGFloat, 顺时针方向:Bool)
并设置一个半径,以及必要的开始和结束角度。
如果你真的必须为此目的使用三次贝塞尔曲线,你应该使用等于 0.5522847498 的幻数 kappa,这是由三次贝塞尔曲线构建的圆的控制点。
我已经在我的网站上放置了一个我所描述内容的小演示:
http://www.trilithon.com/download/AnimatedRingView.zip
希望对您有所帮助。
Bezier 对象不支持将变量附加到它们的维度,但您可以使用具有自定义 start/end 角度的 Oval 对象.
—PaintCode 支持