Почему этот CALayer не отображает изображение? - PullRequest
2 голосов
/ 10 сентября 2009

Ребята, можете ли вы сказать, почему в этом коде нет изображения?

CALayer *layerBack = [CALayer layer];

addedObject = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] 
    pathForResource:[NSString stringWithFormat: @"%@%d", PREFIX, number] ofType:@"png"]];

layerBack.bounds=CGRectMake(0.0f,0.0f,selectedImage.size.height,selectedImage.size.width);
layerBack.position=CGPointMake(200,200);

layerBack.contents = (id)selectedImage.CGImage;
// in theory I think this line should be equal to selectedImage.CGImage, but when I do that, Xcode shows me an error!

[self.view.layer addSublayer:layerBack];

[layerBack display];

Этот Кварц сводит меня с ума! Пожалуйста, помогите!

Да, изображение там и работает, но все, что я вижу после этого кода, это пустой экран.

Ответы [ 4 ]

3 голосов
/ 10 сентября 2009

Я предполагаю, что этот код взят из вашего контроллера представления и что его представление было правильно построено до этого (в противном случае вы будете отправлять сообщения на ноль) Кроме того, я предполагаю, что addedObject выше, вы имеете в виду selectedImage. Одна вещь, которая бросается в глаза, это то, что

[layerBack display];

следует заменить на

[layerBack setNeedsDisplay];

Из документации CALayer относительно -display:

Вы не должны вызывать этот метод непосредственно.

Подробнее о настройке содержимого слоев можно узнать в разделе «Предоставление содержимого слоя» в Руководстве по программированию базовой анимации.

2 голосов
/ 10 сентября 2009

Ну, во-первых, я думаю, что вы должны привести CGImage к идентификатору.

layerBack.contents = (id)selectedImage.CGImage;

А во-вторых, я думаю, что вы должны добавить слой к слою содержимого представлений

[self.view.layer addSublayer:layerBack];

Но я всегда использовал свой собственный класс UIViews + (Class) layerClass; для создания пользовательских слоев, которые размещают свои собственные подслои, но, возможно, это только я.

1 голос
/ 24 сентября 2011

Мост это:

layerBack.contents = (__bridge id)selectedImage.CGImage;
1 голос
/ 10 сентября 2009

Что такое selectedImage и как оно связано с добавленным объектом? Из того, что я вижу, вы получаете изображение, но затем добавляете в слой совершенно другое, не связанное с ним изображение, возможно, пустое.

Обращаете ли вы внимание на сообщения, которые вам предоставляет XCode?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...