首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS CGContext性能差

iOS CGContext性能差
EN

Stack Overflow用户
提问于 2016-11-21 01:56:04
回答 1查看 551关注 0票数 1

我编写了一个呈现函数,它每隔1/60秒钟调用一次。如下所示。本质上,它呈现了40条线的径向模式,使用正弦。看起来像这个http://imgur.com/a/kPKtT。当我用调试器在我的iPhone 6s上运行它时,它显示它使用了大约60%的CPU,它只是“高”的电池使用水平。这对我来说似乎不对,只有40行简单的台词,对吧?

,我能更有效地做这件事吗?我是否应该尝试使用其他的东西,比如CALayer或Metal,以获得更好的性能?顺便说一句,是个菜鸟。

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

发布于 2016-11-21 06:47:04

我觉得阿普托克不好。当您想要显示动画内容时,不应该重新绘制视图。您应该使用CoreAnimation。好消息是它很容易实现。坏消息是,它需要一点学习。;)

对代码的一些建议:

  1. 你画的某些部分似乎是固定不变的。这样我们就不会一次又一次地重新画这个了。相反,您可以将它放在一个单独的层中。
  2. 正如@rmaddy所建议的那样,您需要进行许多sincos计算。但这些价值观应该永远是一样的。所以你可以计算它们一次并缓存它们。
  3. 您可以在抽签(在:)中实现内部绘图,并对代码中的所有变量部分使用动态属性。您可以使用来自CoreAnimation的动画,然后动画您的绘图。在Swift中创建动态CA-属性有点棘手.(据我所知,您必须用@NSManaged(!)对它们进行注释,并且必须重写needsDisplay(forKey:)并为它们返回true。)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40711716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档