Я уверен, что уже слишком поздно, чтобы сделать оригинальный постер хорошим, но он может помочь другим. Я пытался сделать что-то подобное, кроме как сделать неявную анимацию при изменении свойства hidden
. Как говорит Том, анимация opacity
в этом случае не работает, так как изменение скрытого свойства слоя, кажется, сразу же вступает в силу (даже если я задерживаю анимацию с beginTime
).
Стандартное неявное действие использует переход с постепенным исчезновением (CATransition
, type = kCATransitionFade
), но это действует на весь слой, и я хочу одновременно выполнить другую анимацию, которая не является совместимой операцией.
После долгих экспериментов я наконец заметил комментарий @ Кевина выше и --- привет! --- это на самом деле работает! Поэтому я просто хотел назвать это, чтобы решение было более заметным для будущих искателей:
CAKeyframeAnimation* hiddenAnim = [CAKeyframeAnimation animationWithKeyPath:@"hidden"];
hiddenAnim.values = @[@(NO),@(YES)];
hiddenAnim.keyTimes = @[@0.0, @1.0];
hiddenAnim.calculationMode = kCAAnimationDiscrete;
hiddenAnim.duration = duration;
Это задерживает скрытие до конца продолжительности. Объедините его с другими анимациями свойств в группе, чтобы их эффекты были видны до исчезновения слоя. (Вы можете комбинировать это с анимацией непрозрачности, чтобы слой исчезал при выполнении другой анимации.)
Спасибо, Кевин!