Ich habe eine Renderfunktion geschrieben, die jede 1/60 Sekunde aufgerufen wird. Es ist unten gezeigt. Im Wesentlichen werden 40 Linien in einem radialen Muster dargestellt, das Sinus verwendet. Es sieht so aus http://imgur.com/a/kPKtT. Wenn ich es auf meinem iPhone 6s mit dem Debugger starte, zeigt es, dass es ungefähr 60% der CPU verwendet und es macht nur den "hohen" Akkuverbrauch aus. Das scheint mir nicht richtig, es sind nur 40 einfache Zeilen oder?iOS CGContext Schlechte Leistung
Könnte ich das effizienter machen? Sollte ich versuchen, etwas anderes wie CALayer oder Metal für bessere Leistung zu verwenden? Ich bin übrigens ein Noob.
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
}
'while true {print ("loop"}' sollte schnell sein, es ist nur 1 Zeile, nicht wahr? – Alexander
sollte wohl scenekit/GameKit oder openGL, dies zu tun, ich glaube nicht, UIGraphicsImageRenderer entworfen wurde verwendet werden Auf diese Weise – Fonix
Sie cos 2400 mal pro Sekunde und sin 3600 mal pro Sekunde aufrufen sowie mindestens 16800 Multiplikationen pro Sekunde alle nur innerhalb der For-Schleife. – rmaddy