Ich empfange eine Reihe von Bildern über eine Netzwerkverbindung und möchte sie so schnell wie möglich anzeigen, bis zu 30 FPS. Ich habe ein UIView-Objekt abgeleitet (so dass ich drawRect überschreiben kann) und eine UIImage-Eigenschaft namens cameraImage
bereitgestellt. Die Rahmendaten kommen so schnell wie nötig an, aber die eigentliche Zeichnung auf dem Bildschirm benötigt viel zu viel Zeit (als Folge der Verzögerung von setNeedsDisplay), was zu Verzögerungen im Video führt und die Interaktion mit anderen Steuerelementen verlangsamt. Was ist ein besserer Weg, dies zu tun? Ich verwende OpenGL, aber die einzigen Beispiele, die ich gesehen habe, sind nicht das Zeichnen statischer Bilder auf dem Bildschirm, sondern das Hinzufügen von Texturen zu einem rotierenden Polygon.Stream von CGImage-Daten so schnell wie möglich anzeigen
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect screenBounds = [[UIScreen mainScreen] bounds];
[self.cameraImage drawInRect:screenBounds];
// Drawing code
//CGContextDrawImage(context, screenBounds, [self.cameraImage CGImage]); // Doesn't help
}
Das CGImage ist definitiv ein bisschen groß für einen iPad-Bildschirm, und ich sollte wirklich klarstellen und darauf hinweisen, dass es die Verwendung von setNeedsDisplay ist, die mich zu töten scheint. Also wird ein UIImageView das schnell aktualisieren? Ich hatte den Eindruck, das wäre bei weitem das Schlimmste. Danke für die Tipps! – ayrton04
AFAIK Das Setzen eines 'UIImageView's Bildes läuft einfach darauf hinaus, den Inhalt seiner Ebene zu setzen - deshalb sollte man nicht 'UIImageView' ableiten und eine eigene Zeichnung machen, denn dann würde das Bild komplett überschrieben werden. Wie immer versuchen Sie es und sehen Sie. –