Удалить CALayers после остановки анимации один за другим - PullRequest
0 голосов
/ 03 августа 2011

Я хочу сделать стопку монет, когда пользователь нажмет «Fly in» -> монета полетит по изогнутой траектории и соберется в стопку.Я использовал CALayer:

CALayers *coinLayer = [CALayers layer];
coinLayer.backgroundColor = [UIColor clearColor].CGColor;
coinLayer.contents = (id)[UIImage imageNamed:@"head coin.png"].CGImage;
coinLayer.frame = CGRectMake(100, 500 - (10*coin), 55, 21);
coin = coin + 1;
[self.view.layer addSublayer:coinLayer];

Я сделал с анимацией по изогнутому пути, но если я добавлю свой coinLayer таким образом, то как я могу удалить CALayer, если я не добавлю его в массив.

Например, у меня есть стек чисел, я добавляю 1,2,3,4,5,6,7,8,9 в стек.При удалении 4 чисел, это будет делать от 9 до 8 ... до 6 по одному.В моем коде это правильно, когда я добавляю CALayer в слой представления?Как я могу удалить слои один за другим так же, как в примере?

Большое вам спасибо!

1 Ответ

1 голос
/ 06 августа 2011

Вместо создания и удаления объектов CALayer лучше хранить их в массиве и просто устанавливать их скрытые свойства всякий раз, когда они вам нужны.

в шапке:

    NSMutableArray* coins;

В файле m:

-(void)newCoin;
{
    //create the array if it doesn't already exist - could add this to your init
    if(!coins)
    {
        coins = [NSMutableArray array];
    }
    for(CALayer* aCoin in coins)
    {
        //find the first hidden coin and use it
        if(aCoin.hidden)
        {
            //reset the coins position to where you want the "new" coin
            return;
        }
    }
    //didn't find any unused coins - make a new one
    [coins addObject:[self createCoin]];

Когда анимация заканчивается, просто установите для скрытого свойства монеты значение true.

coin.hidden = YES;

Я использую этот метод для одновременной обработки тысяч объектов CALayer, и он гораздо более дружествен к ресурсам, чем постоянное создание новых CALayers.

...