У меня есть рабочий переход с использованием 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:
может быть дробным.