UIModalPresentationOverCurrentContext
をモーダルで表示するには、UIViewController
をモーダルで表示しています。 messageVC
内部終了前にアニメーション完了ブロックを実行しますか?
[self presentViewController:messageVC animated:NO completion:^{
[messageVC displayMessageAutoReversed:YES withBlock:^(BOOL finished) {
if (finished) {
[messageVC dismissViewControllerAnimated:YES completion:nil];
}
}];
}];
、このメソッドが呼び出され:
-(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
にちらつきを鳴らし、次にぼやけています。
編集:
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 hmm、strange。 – Erik
@ Paulw11は妥当と思われますが、どのようにアニメーション化できない場合はnilを設定することで、ぼかしを完全に透明にフェード/アニメーションできますか? - 実際にアニメーション化されているように、ちらつきの後にちょうど1〜2秒後に – Erik