为什么核心图形线不对齐?
Why Are Core Graphics Lines Not Aligned?
快速提问:这段代码应该产生(以及其他)4 条相互垂直的线。但是,当运行时,所有的线都有少量偏移。
for i in 0..<60 {
CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, rect.width / 2, rect.height / 2)
CGContextRotateCTM(ctx, CGFloat(6.0 * Double(i) * M_PI / 180))
CGContextSetStrokeColorWithColor(ctx, UIColor.grayColor().CGColor)
CGContextMoveToPoint(ctx, 50, 50)
if (i % 5 == 0) {
CGContextSetLineWidth(ctx, 3.0)
CGContextAddLineToPoint(ctx, 30, 30)
}
else {
CGContextSetLineWidth(ctx, 2.0)
CGContextAddLineToPoint(ctx, 40, 40)
}
CGContextStrokePath(ctx)
CGContextRestoreGState(ctx)
}
仍在学习Core Graphics,很抱歉,如果这很简单。
此致,布兰登
编辑 1:
这是我得到的:
如果我的假设是正确的,您想在表盘上绘制看起来像刻度线的刻度线。
如果让它只绘制一次迭代,例如
for i in 0..<1
您会看到第一个刻度从某个角度开始。发生这种情况是因为您正在从 (x=50, y=50) 到 (x=30, y=30)
画线
尝试将其更改为 (x=50, y=0)(x=30, y=0)
for i in 0..<60 {
CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, rect.width / 2, rect.height / 2)
CGContextRotateCTM(ctx, CGFloat(6.0 * Double(i) * M_PI / 180))
CGContextSetStrokeColorWithColor(ctx, UIColor.grayColor().CGColor)
CGContextMoveToPoint(ctx, 50, 0) // <-- changed here
if (i % 5 == 0) {
CGContextSetLineWidth(ctx, 3.0)
CGContextAddLineToPoint(ctx, 30, 0) // <-- changed here
}
else {
CGContextSetLineWidth(ctx, 2.0)
CGContextAddLineToPoint(ctx, 40, 0) // <-- changed here
}
CGContextStrokePath(ctx)
CGContextRestoreGState(ctx)
}
结果
快速提问:这段代码应该产生(以及其他)4 条相互垂直的线。但是,当运行时,所有的线都有少量偏移。
for i in 0..<60 {
CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, rect.width / 2, rect.height / 2)
CGContextRotateCTM(ctx, CGFloat(6.0 * Double(i) * M_PI / 180))
CGContextSetStrokeColorWithColor(ctx, UIColor.grayColor().CGColor)
CGContextMoveToPoint(ctx, 50, 50)
if (i % 5 == 0) {
CGContextSetLineWidth(ctx, 3.0)
CGContextAddLineToPoint(ctx, 30, 30)
}
else {
CGContextSetLineWidth(ctx, 2.0)
CGContextAddLineToPoint(ctx, 40, 40)
}
CGContextStrokePath(ctx)
CGContextRestoreGState(ctx)
}
仍在学习Core Graphics,很抱歉,如果这很简单。
此致,布兰登
编辑 1:
这是我得到的:
如果我的假设是正确的,您想在表盘上绘制看起来像刻度线的刻度线。
如果让它只绘制一次迭代,例如
for i in 0..<1
您会看到第一个刻度从某个角度开始。发生这种情况是因为您正在从 (x=50, y=50) 到 (x=30, y=30)
画线尝试将其更改为 (x=50, y=0)(x=30, y=0)
for i in 0..<60 {
CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, rect.width / 2, rect.height / 2)
CGContextRotateCTM(ctx, CGFloat(6.0 * Double(i) * M_PI / 180))
CGContextSetStrokeColorWithColor(ctx, UIColor.grayColor().CGColor)
CGContextMoveToPoint(ctx, 50, 0) // <-- changed here
if (i % 5 == 0) {
CGContextSetLineWidth(ctx, 3.0)
CGContextAddLineToPoint(ctx, 30, 0) // <-- changed here
}
else {
CGContextSetLineWidth(ctx, 2.0)
CGContextAddLineToPoint(ctx, 40, 0) // <-- changed here
}
CGContextStrokePath(ctx)
CGContextRestoreGState(ctx)
}
结果