我编写了一个呈现函数,它每隔1/60秒钟调用一次。如下所示。本质上,它呈现了40条线的径向模式,使用正弦。看起来像这个http://imgur.com/a/kPKtT。当我用调试器在我的iPhone 6s上运行它时,它显示它使用了大约60%的CPU,它只是“高”的电池使用水平。这对我来说似乎不对,只有40行简单的台词,对吧?
,我能更有效地做这件事吗?我是否应该尝试使用其他的东西,比如CALayer或Metal,以获得更好的性能?顺便说一句,是个菜鸟。
func render() { tick += 0.01
let renderer = UIGraphicsImageRenderer(size: CGSize(width: 375, height: 667))
let img = renderer.image { ctx in
let c = ctx.cgContext
// Set background
let background = CGRect(x: 0, y: 0, width: 375, height: 667)
c.setFillColor(UIColor.black.cgColor)
c.addRect(background)
c.drawPath(using: .fillStroke)
// Function to draw a line
func line(p1:CGPoint, p2:CGPoint) {
let line = CGRect(x: 0, y: 0, width: 200, height: 200)
c.addLines(between: [p1,p2])
c.drawPath(using: .fillStroke)
}
// Draw lines
c.setStrokeColor(UIColor.white.cgColor)
c.setLineWidth(1)
c.setLineCap(CGLineCap.round)
for i in 0...39 {
let n:CGFloat = CGFloat(i) * CGFloat.pi/40
let d:CGFloat = sin(tick + CGFloat(i)*CGFloat.pi/5)*20 + 100
line(p1: CGPoint(x: d*cos(tick+n)+187.5, y: d*sin(tick+n)+333.5),
p2: CGPoint(x: d*cos(tick+n+CGFloat.pi)+187.5, y: d*sin(tick+n+CGFloat.pi)+333.5))
}
}
imageView.image = img
}发布于 2016-11-21 06:47:04
我觉得阿普托克不好。当您想要显示动画内容时,不应该重新绘制视图。您应该使用CoreAnimation。好消息是它很容易实现。坏消息是,它需要一点学习。;)
对代码的一些建议:
sin和cos计算。但这些价值观应该永远是一样的。所以你可以计算它们一次并缓存它们。@NSManaged(!)对它们进行注释,并且必须重写needsDisplay(forKey:)并为它们返回true。)https://stackoverflow.com/questions/40711716
复制相似问题