Частичная анимация завивки страницы

У меня есть рабочий переход с использованием UIViewAnimationTransitionCurlUp, однако мне хотелось бы, чтобы анимация остановилась на полпути, как приложение Maps... Любые мысли о том, как это сделать?

Ответ 1

Частичная скручиваемость Карт является частным API. Вы можете найти подробную информацию о том, как его использовать, в книге Эрики Садун " The iPhone Developer Cookbook", но вы будете отклонены из App Store за ее использование.

Ответ 2

В iOS 3.2 и более поздних версиях вы можете указать UIViewController a UIModalTransitionStyle UIModalTransitionStylePartialCurl. Из UIViewController reference мы видим

typedef enum {
  UIModalTransitionStyleCoverVertical = 0,
  UIModalTransitionStyleFlipHorizontal,
  UIModalTransitionStyleCrossDissolve,
  UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;

Итак, пример использования:

UIViewController *viewController;
// …create or retrieve your view controller…

// Note: The modalPresentationStyle must be UIModalPresentationFullScreen,
//       and the presenter must also be a full-screen view
viewController.modalPresentationStyle = UIModalPresentationFullScreen;
viewController.modalTransitionStyle = UIModalTransitionStylePartialCurl;

Ответ 3

Я нашел решение добавить UIView в UIViewController, используя блок анимации.

m_Container - это UIView, который содержит анимацию моего представления (self). Я - это UIView.

ВНИМАНИЕ: Вам нужно иметь импорт QuartzCore

Чтобы представить вид с анимацией скручивания страницы, вы можете использовать:

-(void)PresentView
{
    [UIView animateWithDuration:1.0 
                     animations:^{
                         CATransition *animation = [CATransition animation];
                         [animation setDelegate:self];
                         [animation setDuration:0.7];
                         [animation setTimingFunction:UIViewAnimationCurveEaseInOut];
                         animation.type = @"pageCurl";
                         animation.fillMode = kCAFillModeForwards;
                         animation.endProgress = 0.65;
                         [animation setRemovedOnCompletion:NO];
                         [m_container.layer addAnimation:animation forKey:@"pageCurlAnimation"];  
                         [m_container addSubview:self];
                         ;}  
     ];    
}

И когда вы хотите скрыть это представление, вы можете использовать:

-(void)HideHelpView
{
    [UIView animateWithDuration:1.0 
                     animations:^{
                         CATransition *animation = [CATransition animation];
                         [animation setDelegate:self];
                         [animation setDuration:0.7];
                         [animation setTimingFunction:UIViewAnimationCurveEaseInOut];
                         animation.type = @"pageUnCurl";
                         animation.fillMode = kCAFillModeForwards;
                         animation.startProgress = 0.35;
                         [animation setRemovedOnCompletion:NO];
                         [m_container.layer addAnimation:animation forKey:@"pageUnCurlAnimation"];  
                         [self removeFromSuperview];

                         ;}  
     ];

}

Ответ 4

Не уверен, что это будет работать, но параметр +setAnimationRepeatCount: может быть дробным.