ios - CoreGraphics 之字形和 2 个 CGPoint 之间的哈希线
问题描述
我正在使用 Swift 构建一个 iOS 项目。如何使用CoreGraphics绘制锯齿形路径?我如何计算所有的中间点?
我还需要画一条哈希线吗?这可以用CoreGraphics创建吗?
解决方案
一般的想法是:
- 获取宽度:pt2.x - pt1.x
- 获取高度:pt2.y - pt1.y
- step-width 是 20,所以将宽度除以 20 得到步数
- step-height 将是高度/步数
- 创建一个
UIBezierPath
- 循环步数,递增 x 和 y 值
.lineTo(pt)
这是一个示例 - 请注意,它没有错误处理,如果不在右侧且低于 ,则需要pt2
额外的逻辑pt1
:
class SampleCGView: UIView {
var pt1: CGPoint = .zero
var pt2: CGPoint = .zero
override func draw(_ rect: CGRect) {
// green line to show pt1 to pt2
let linePath: UIBezierPath = UIBezierPath()
linePath.move(to: pt1)
linePath.addLine(to: pt2)
UIColor.green.setStroke()
linePath.stroke()
let zigzagPath: UIBezierPath = UIBezierPath()
let numSteps: CGFloat = (pt2.x - pt1.x) / 20.0
// step width is 20
let xInc: CGFloat = 20
// step height is based on line angle
let yInc: CGFloat = (pt2.y - pt1.y) / numSteps
var pt: CGPoint = pt1
zigzagPath.move(to: pt)
for _ in 1...Int(numSteps) {
zigzagPath.addLine(to: CGPoint(x: pt.x + xInc * 0.75, y: pt.y - yInc * 0.25))
zigzagPath.addLine(to: CGPoint(x: pt.x + xInc, y: pt.y + yInc))
pt.x += xInc
pt.y += yInc
}
UIColor.black.setStroke()
zigzagPath.stroke()
}
}
示例视图控制器演示:
class SampleDrawViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let v = SampleCGView()
v.backgroundColor = .systemYellow
v.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(v)
let g = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
v.topAnchor.constraint(equalTo: g.topAnchor, constant: 80.0),
v.leadingAnchor.constraint(equalTo: g.leadingAnchor, constant: 40.0),
v.trailingAnchor.constraint(equalTo: g.trailingAnchor, constant: -40.0),
v.bottomAnchor.constraint(equalTo: g.bottomAnchor, constant: -80.0),
])
// set start and end points for the zigzag line
v.pt1 = CGPoint(x: 40, y: 40)
v.pt2 = CGPoint(x: 260, y: 160)
}
}
结果(绘制绿线只是为了使位置清晰)pt1
:pt2
推荐阅读
- android - 录音机未发布
- can-bus - 有什么方法可以阻止来自 CANoe 总线上外部设备的特定 CAN 消息?
- java - 错误:二元运算符“%”的操作数类型错误
- android - 使用 RingtoneMananger 设置自定义铃声/通知显示无效文件
- cmake - Windows 上的 Git Bash - CMake 错误:源目录不存在
- html - 与 html 中的输入关联的数据列表的值
- r - 有没有办法在 R 优化器中定义复杂的目标函数?
- javascript - Mobx 状态不更新
- discord.py - 为什么我不能限制我的机器人使用命令 - discord.py
- multithreading - 在 Visual Studio 2019 中调试 NUnit 测试时如何切换到正确的线程?