Как проверить, существует ли CALayer

У меня есть CALayer, который анимирует (перемещается) за пределы экрана по оси y. После того, как он за пределами экрана, я делаю [myLayer removeFromSuperLayer], чтобы он исчез из поля зрения и не вернулся в исходное положение.

Пока слой все еще отображается, его можно приостановить и возобновить, нажав кнопку-переключатель, и все это отлично работает.

Единственное, что после запуска [myLayer removeFromSuperLayer] приложение вылетает. Это вызвано тем, что кнопка пытается приостановить или возобновить слой, который больше не существует.

Как я могу проверить, удален ли слой или все еще отображается?

Я подумал что-то вроде этого для части паузы моего переключателя:

if (self.myLayer == nil)
    {
        // here i want to add the layer again
        [self.view.layer addSublayer:myLayer];
        // immediately pause it
        [self pauseLayer:myLayer];

    }

else

    {
        // just pause no need to create the layer again because it's still there 
        [self pauseLayer:myLayer]; 
    }

Как вы могли догадаться, self.myLayer == nil - это не способ сделать это, но что это такое?

Заранее спасибо.


person ivoos    schedule 22.03.2011    source источник


Ответы (1)


Удаление слоя из его суперслоя не приведет к тому, что слой станет нулевым, поэтому ваша self.myLayer == nil проверка не работает. Однако вы можете легко установить для поля значение nil, когда удалите его, например:

[self.myLayer removeFromSuperLayer];
self.myLayer = nil;

Конечно, если вам нужно добавить его снова после этого, вам нужно будет либо переназначить слой на self.myLayer (если у вас есть ссылка на него, которую вы храните в другом месте), либо создать новый экземпляр слоя с нуля. .

person aroth    schedule 22.03.2011
comment
Оке нашел другой способ, чтобы он не возвращался в исходное положение. anim.removedOnCompletion = НЕТ; anim.fillMode = kCAFillModeForwards; теперь мне даже не нужно больше проверять. - person ivoos; 24.03.2011