- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这是我使用的代码:
重复
for i in 1...60 {
CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, rect.width / 2, 0)
CGContextRotateCTM(ctx, 6 * CGFloat(i))
CGContextSetStrokeColorWithColor(ctx, UIColor.grayColor().CGColor)
CGContextMoveToPoint(ctx, 0, 0)
if (i % 5 == 0) {
CGContextSetLineWidth(ctx, 3.0)
CGContextAddLineToPoint(ctx, 0, 20)
}
else {
CGContextSetLineWidth(ctx, 2.0)
CGContextAddLineToPoint(ctx, 0, 15)
}
CGContextStrokePath(ctx)
CGContextRestoreGState(ctx)
}
输出是几行,都紧紧地聚集在一起。
我是 Core Graphics 的新手,我是不是误解了这段代码的工作原理?如果不是,问题是什么?
问候,布兰登
最佳答案
给你
for i in 0..<60 {
CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, rect.width / 2, rect.height / 2)
CGContextRotateCTM(ctx, CGFloat(Double(i) * M_PI / 30))
CGContextSetStrokeColorWithColor(ctx, UIColor.grayColor().CGColor)
CGContextTranslateCTM(ctx, 50, 0)
CGContextMoveToPoint(ctx, 0, 0)
if (i % 5 == 0) {
CGContextSetLineWidth(ctx, 3.0)
CGContextAddLineToPoint(ctx, -20, 0)
} else {
CGContextSetLineWidth(ctx, 2.0)
CGContextAddLineToPoint(ctx, -10, 0)
}
CGContextStrokePath(ctx)
CGContextRestoreGState(ctx)
}
导致
解释:
首先:修正度数/弧度算术。
6 * i
以度为单位* M_PI/180
6 * i * M_PI/180
可以简化为i * M_PI/30
其次:正确的几何形状。
50
翻译到右边20
或 10
长的线。向内表示negative
没有内部翻译的替代方案
for i in 0..<60 {
CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, rect.width / 2, rect.height / 2)
CGContextRotateCTM(ctx, CGFloat(Double(i) * M_PI / 30))
CGContextSetStrokeColorWithColor(ctx, UIColor.grayColor().CGColor)
CGContextMoveToPoint(ctx, 50, 0)
if (i % 5 == 0) {
CGContextSetLineWidth(ctx, 3.0)
CGContextAddLineToPoint(ctx, 30, 0)
} else {
CGContextSetLineWidth(ctx, 2.0)
CGContextAddLineToPoint(ctx, 40, 0)
}
CGContextStrokePath(ctx)
CGContextRestoreGState(ctx)
}
完整的工作 Playground :
import UIKit
import XCPlayground
class CustomView : UIView {
override func drawRect(rect: CGRect) {
let ctx = UIGraphicsGetCurrentContext()
for i in 0..<60 {
CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, rect.width / 2, rect.height / 2)
CGContextRotateCTM(ctx, CGFloat(Double(i) * M_PI / 30))
CGContextSetStrokeColorWithColor(ctx, UIColor.grayColor().CGColor)
CGContextTranslateCTM(ctx, 50, 0)
CGContextMoveToPoint(ctx, 0, 0)
if (i % 5 == 0) {
CGContextSetLineWidth(ctx, 3.0)
CGContextAddLineToPoint(ctx, -20, 0)
} else {
CGContextSetLineWidth(ctx, 2.0)
CGContextAddLineToPoint(ctx, -10, 0)
}
CGContextStrokePath(ctx)
CGContextRestoreGState(ctx)
}
}
}
let v = CustomView(frame: CGRectMake(0,0,200,200))
v.backgroundColor = .lightGrayColor()
XCPShowView("blabla", view: v)
关于ios - 为什么我的线不旋转? -- CGContextRotateCTM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34964109/
这是我使用的代码: 保存上下文 将上下文移动到矩形的中间 旋转上下文 从旋转的原点画一条线 恢复上下文 重复 for i in 1...60 { CGContextSaveGState(ctx
我有一个 UIButton 的子类。 这是我必须尝试旋转它的代码。 -(void)drawRect:(CGRect)rect { CGContextRef context = UIGraphi
我想像下面的代码一样在主屏幕上绘制一个删除按钮,就像删除应用程序按钮一样。 思路是先画十字,然后旋转45度。我的代码有什么问题? self.deleteButton = [[UIButton allo
#define radians(degrees) (degrees * M_PI/180) UIImage *rotate(UIImage *image) { CGSize size = imag
我有一个项目,我必须在用户的拇指下旋转一个大图像,它代表一个表盘,使用轮流选择一年中的一天。我目前正在使用 CGContextRotateCTM() 和 -[UIImage drawInRect:]
我是一名优秀的程序员,十分优秀!