Самый эффективный способ создать CALayer с изображением в нем? - PullRequest
8 голосов
/ 14 июня 2009

Мне интересно, какой самый эффективный способ сделать CALayer с изображением в нем.

Я знаю, что вы можете загрузить UIImage и затем вызвать [image CGImage], но разве это лучший способ? Насколько я могу судить из документации Apple, это единственный способ сделать это.

Ответы [ 2 ]

18 голосов
/ 10 мая 2011

Попробуйте это:

layer.contents = (__bridge id)[ uiimage CGImage ] ;

НТН

2 голосов
/ 14 июня 2009

Что ж, CGImage - это не CALayer, так что вы, очевидно, оставляете некоторые шаги там, но я предполагаю, что вы знаете, о чем говорите, вплоть до рисования на CALayer или еще чего .

Если ваш вопрос касается создания CGImage s без использования UIImage, вы можете попробовать поискать следующие функции:

  • CGImageCreateWithJPEGDataProvider
  • CGImageCreateWithPNGDataProvider

Если вам заранее известно, что это за изображение, просто используйте соответствующий метод. В противном случае вам нужно будет посмотреть на подпись файла, чтобы увидеть, содержит ли он PNG или JFIF. Конечно, это требует от вас реализации CGDataProvider.

Полагаю, это именно то, что класс UIImage уже делает. Если вы хотите выжать из этого каждый бит эффективности, вы можете использовать один из следующих методов в классе UIImage:

+ (UIImage *)imageWithContentsOfFile:(NSString *)path
+ (UIImage *)imageWithData:(NSData *)data

Единственная разница между этими методами и

+ (UIImage *)imageNamed:(NSString *)name

означает, что imageNamed: кэширует изображение. Если вы используете один из первых методов, это не так.

...