Я пытался использовать CALayers как «спрайты» в приложении для iPhone, над которым я работаю. Из того, что я читал, это похоже на правильную вещь здесь.Есть ли причина, по которой я не могу инициализировать CALayer вне класса UIView?
Когда я настраиваю слой внутри класса UIView, я могу заставить слой отображаться на экране: NSLog (@ "GameView initWithCoder");
NSString* imagePath = [[NSBundle mainBundle] pathForResource:@"earth" ofType:@"png"];
earthImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
earthLayer = [CALayer layer];
[earthLayer setContents:(id)[earthImage CGImage]];
[earthLayer setBounds:CGRectMake(0, 0, 32, 32)];
[earthLayer setPosition:CGPointMake(50, 50)];
[earthLayer setName:@"earth"];
[[self layer] addSublayer:earthLayer];
Однако, когда я пытаюсь инициализировать CALayer за пределами UIView, мой сбой приложения:
- (void)loadImage:(NSString*)fileName
{
NSLog(@"GamePiece loadImage");
NSArray* fileNameParts = [fileName componentsSeparatedByString:@"."];
imageName = [[fileNameParts objectAtIndex:0] retain];
NSString* ext = [fileNameParts objectAtIndex:1];
NSString* imagePath = [[NSBundle mainBundle] pathForResource:imageName ofType:ext];
image = [[UIImage alloc] initWithContentsOfFile:imagePath];
layer = [CALayer layer];
[layer setContents:(id)[image CGImage]];
[layer setBounds:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
[layer setPosition:CGPointMake(50.0f, 50.0f)];
[layer setName:imageName];
[fileNameParts release], fileNameParts = nil;
[ext release], ext = nil;
}
NSLog(@"GameView initWithCoder");
earth = [[GamePiece alloc] init];
[earth loadImage:@"earth.png"];
[[self layer] addSublayer:[earth layer]];
Очевидно, я делаю что-то неправильно, но я просто не Не знаю, что это будет. Я прочитал Руководство по программированию основной анимации, а также Руководство по программированию приложений для iPhone, но они действительно не говорят о том, как инициализировать CALayer, кроме как попутно.
Мне просто нужно нежно подтолкнуть в правильном направлении. Я получаю довольно хорошее представление обо всем, что я узнал, когда дело доходит до программирования iPhone. У меня просто проблемы с графикой, слоями и анимацией.
Заранее благодарен!
На самом деле, слой по-прежнему является проблемой, даже если вам повезло. Вы должны сохранить его, если это ивар. Что касается имени файла, я пропустил это.Вам фактически не нужно сохранять или копировать это. Просто не выпускайте его :) В основном, вещи, которые вы используете только во время своей функции, не должны активно управляться, если вы их не создали (alloc/copy/new). Вещи, которые вы хотите придерживаться, должны быть активно управляемы (поэтому, если вы не выделили/не скопировали/не новый, вы должны сохранить). –