У меня есть простая настройка анимации в приложении Mac, где элемент управления страницей меняет некоторые представления. Я очень близок к тому, чтобы получить анимацию, похожую на пейджинг, которую я хочу, но есть небольшая проблема. Разбиение по страницам работает, и новая страница анимируется правильно, но новая страница также заменяет исходную страницу до анимации. Я хочу, чтобы в конечном итоге представление, которое выталкивается, оставалось прежним, а не переходило на новую страницу раньше. Вот видео, показывающее проблему, длительность анимации замедлена до 3 секунд. Вот код:
UASourceView *previousSourceView = [self.sourceViewContainer.subviews objectAtIndex:0];
NSInteger previousIndex = [self.sourceViews indexOfObjectIdenticalTo:previousSourceView];
CATransition *pushTransition = [CATransition animation];
[pushTransition setType:kCATransitionPush];
[pushTransition setSubtype:(previousIndex < index) ? kCATransitionFromRight : kCATransitionFromLeft];
[pushTransition setDuration:PANEL_PAGE_SWIPE_ANIMATION_DURATION];
[pushTransition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[pushTransition setRemovedOnCompletion:YES];
[CATransaction begin];
[self.sourceViewContainer replaceSubview:previousSourceView with:sourceView];
[CATransaction commit];
[sourceView.layer addAnimation:pushTransition forKey:@"push"];
Существует фиксированное представление контейнера self.sourceViewContainer
, которое заменяется новым подпредставлением при каждой анимации. Проблема, как показано выше, заключается в том, что previousSourceView
немедленно заменяется на sourceView
и также вставляется. Пожалуйста, помогите мне остановить немедленную замену. Где я ошибаюсь?
*Примечание: добавлен тег iOS
, поскольку этот код не зависит от платформы.