Невозможно отключить анимацию CALayer >> removeFromSuperlayer - PullRequest
2 голосов
/ 28 июня 2010

Я хочу удалить CALayer из суперслоя без анимации.Здесь происходит то, что слой анимируется в позицию, прекрасно работает, когда анимация останавливается, этот код выполняется, который возвращает слой в начальную позицию и исчезает;по-видимому, затем удаляется из суперслоя.Как можно остановить анимацию -removeFromSuperlayer?Код, приведенный здесь, имеет одинаковое поведение для всех вариантов включенных комментариев, которые не комментируются и не комментируются, Транзакция или нет транзакции.Чего мне не хватает?

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    //[self setHidden: YES];

    //[CATransaction flush];
    [CATransaction begin];
    [CATransaction setValue:(id)kCFBooleanTrue
                     forKey:kCATransactionDisableActions];
    //[CATransaction setDisableActions: YES];
    //[CATransaction setAnimationDuration: 0];
    [self removeFromSuperlayer];
    [CATransaction commit];
}

Я искал вокруг, и этот код ничем не отличается от того, что я нашел.

1 Ответ

3 голосов
/ 29 июня 2010

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

NSMutableDictionary *newActions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"sublayers", nil];
superlayer.actions = newActions;
[newActions release];

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

...