Как проверить, существует ли CALayer - PullRequest
2 голосов
/ 23 марта 2011

У меня есть 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 это не способ сделать это, а что такое?

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

1 Ответ

0 голосов
/ 23 марта 2011

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

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

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

...