Я показываю UIViewController
с использованием UIModalPresentationOverCurrentContext
, чтобы выполнить анимацию.Запуск блока анимации до завершения?
[self presentViewController:messageVC animated:NO completion:^{
[messageVC displayMessageAutoReversed:YES withBlock:^(BOOL finished) {
if (finished) {
[messageVC dismissViewControllerAnimated:YES completion:nil];
}
}];
}];
внутри messageVC
, этот метод вызывается:
-(void)displayMessageAutoReversed:(BOOL)autoReversed withBlock:(void (^)(BOOL finished))handler {
NSTimeInterval animationDuration = 0.4;
[UIView animateWithDuration:animationDuration delay:0 usingSpringWithDamping:1.5 initialSpringVelocity:2.5f options:UIViewAnimationOptionTransitionNone animations:^{
self.visualEffectView.effect = [UIBlurEffect effectWithStyle:self.blurEffectStyle];
self.messageLabel.alpha = 1.0f;
self.imageView.alpha = 1.0f;
}completion:^(BOOL finished) {
if (finished)
{
if (autoReversed)
{
[self hideMessageWithBlock:^(BOOL finished) {
if (handler) { handler(finished); }
}];
} else
{
if (handler) { handler(finished); }
}
}
}];
}
-(void)hideMessageWithBlock:(void (^)(BOOL finished))handler {
NSTimeInterval animationDuration = 0.4;
[UIView animateWithDuration:animationDuration delay:animationDuration + 1.5 usingSpringWithDamping:1.5 initialSpringVelocity:2.5f options:UIViewAnimationOptionTransitionNone animations:^{
self.visualEffectView.effect = nil;
self.messageLabel.alpha = 0.0f;
self.imageView.alpha = 0.0f;
}completion:^(BOOL finished) {
if (handler) { handler(finished); }
}];
}
но блок анимации внутри hideMessageWithBlock
называется мгновенно, а не после того, как второй задержки 1.9 - который устанавливает эффект до нуля, прежде чем он внезапно отскакивает назад к размытому. Почему это? Этот вид мерцает до nil
, а затем возвращается к размытому, прежде чем он исчезает правильно после другой секунды.
Edit:
double delayInSeconds = 2.0;
dispatch_time_t reverseTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(reverseTime, dispatch_get_main_queue(), ^(void) {
/* put whole animation block here? */
});
Я не уверен, что анимация «visualEffectView» будет работать с анимацией весны. – Sulthan
@sulthan хм, странно. Должен быть хорошо работающим, учитывая, что он анимирован правильно, за исключением мерцания – Erik
@ Paulw11 кажется правдоподобным, но почему вы можете потушить/оживить размытие до полностью прозрачного, установив нуль, если он не анимируется? - Как есть на самом деле анимация, всего через секунду или два после мерцания. – Erik