iPhone: Как добавить слои в корневой слой UIView, чтобы отобразить изображение со свойством содержимого? - PullRequest
6 голосов
/ 24 декабря 2009

Согласно документации Mac Dev Center, вы должны иметь возможность установить свойство содержимого CALayer и автоматически отображать его. Тем не менее, я все еще не могу получить простое изображение для отображения, добавив подслой в корень UIView позже. Я пробовал несколько разных вариантов; вот что у меня так далеко:

(Примечание: я знаю, что есть другие способы рендеринга изображений; для моих целей я бы хотел использовать CALayer для некоторых из более сложных вещей, которые я собираюсь рассмотреть).

(в viewDidDisplay () ViewController):

 CALayer *theLayer = [CALayer layer];
 [[[self view] layer] addSublayer:theLayer];
 theLayer.contents = (id)[[UIImage imageNamed:@"mypic.png"] CGImage];
 theLayer.contentsRect = CGRectMake(0.0f, 0.0f, 300.0f, 300.0f);
 theLayer.bounds = CGRectMake(0.0f, 0.0f, 300.0f, 400.0f);

Кто-нибудь знает, что я делаю не так?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 24 декабря 2009

Вы можете загрузить изображение в UIImageView, который происходит от UIView и поэтому имеет свое собственное свойство layer.

UIImageView *imgView = [[UIImageView alloc] initWithFrame:frame];
imgView.image = [UIImage imageNamed:@"mypic.png"];

[[[self view] layer] addSublayer:[imgView layer]];
[imgView release];
1 голос
/ 24 декабря 2009

Вам не нужно устанавливать contentsRect (и если вы это сделаете, он должен быть в координатном пространстве единицы, вероятно, просто CGRectMake(0, 0, 1.0, 1.0).

Возможно, вы захотите установить свойство layer position.

0 голосов
/ 14 февраля 2012

Вам нужно создать два CALayer. Это идеальный способ отображения изображения в CALayer.

CALayer *pulseLayer_ = [[CALayer layer] retain];

pulseLayer_.backgroundColor = [[UIColor whiteColor] CGColor];
pulseLayer_.bounds = CGRectMake(0., 0., 80., 80.);
pulseLayer_.cornerRadius = 12.;
pulseLayer_.position = self.view.center;

[self.view.layer addSublayer:pulseLayer_];


CALayer *imageLayer = [CALayer layer];

imageLayer.frame = pulseLayer_.bounds;
imageLayer.cornerRadius = 10.0;
imageLayer.contents = (id) [UIImage imageNamed:@"jacklogo.png"].CGImage;
imageLayer.masksToBounds = YES;

[pulseLayer_ addSublayer:imageLayer];

[pulseLayer_ setNeedsDisplay];

Я думаю, что это решение вашей проблемы.

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