Effizienteste Weg, um eine CALayer mit einem Bild in ihm zu schaffen?
Frage
Ich frage mich, was der effizienteste Weg, um eine CALayer mit einem Bild in ihm zu machen.
Ich weiß, dass Sie eine UIImage laden und rufen Sie dann [Bild CGImage] aber ist dies der beste Weg zu gehen darüber? Soweit ich von der Apple-Dokumentation kann sagen, dies ist der einzige Weg, es zu tun.
Lösung
Nun, ein CGImage
ist kein CALayer
, so verlassen Sie offensichtlich einige Schritte gibt, aber ich nehme an, Sie wissen, was Sie reden, bis zu einem CALayer
oder Dingsbums zu ziehen.
Wenn Sie Ihre Frage ist CGImage
s zu schaffen, ohne eine UIImage zu verwenden, können Sie versuchen, in die folgenden Funktionen suchen:
- CGImageCreateWithJPEGDataProvider
- CGImageCreateWithPNGDataProvider
Wenn Sie wissen, zufällig vorher, welche Art von Bild ist es, verwenden Sie einfach die entsprechende Methode. Andernfalls müssen Sie bei der Dateisignatur, um zu sehen, ob es PNG oder JFIF enthält. Natürlich ist dies erfordert, dass Sie eine CGDataProvider
implementieren.
Ich nehme an, das ist genau das, was die UIImage
Klasse bereits tut. Wenn Sie jedes Bit der Effizienz von der Squeeze-out möchten, können Sie eine der folgenden Methoden in der UIImage
-Klasse verwenden:
+ (UIImage *)imageWithContentsOfFile:(NSString *)path
+ (UIImage *)imageWithData:(NSData *)data
Der einzige Unterschied zwischen diesen Methoden und
+ (UIImage *)imageNamed:(NSString *)name
ist, dass imageNamed:
das Bild zwischenspeichert. Wenn Sie eine der ersten Methoden verwenden, es funktioniert nicht.
Andere Tipps
Versuchen Sie folgendes:
layer.contents = (__bridge id)[ uiimage CGImage ] ;
HTH