Bir animasyon gerçekleştirmek için UIModalPresentationOverCurrentContext
'u kullanarak bir UIViewController
modelini görüntülüyorum. messageVC
içindeAnimasyon tamamlama bloğu bitmeden önce mi çalışıyor?
[self presentViewController:messageVC animated:NO completion:^{
[messageVC displayMessageAutoReversed:YES withBlock:^(BOOL finished) {
if (finished) {
[messageVC dismissViewControllerAnimated:YES completion:nil];
}
}];
}];
, bu yöntem adı:
-(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); }
}];
}
ancak hideMessageWithBlock
içindeki animasyon blok yerine 1.9 saniyelik bir gecikmeden sonra daha anında denir - aniden sekerek önce sıfıra etkisini belirler bulanıklaştırmak için. Bu neden?nil
'a göre bir çeşit titremeler oluyor ve daha sonra bir saniyelik bir süre geçtikten sonra bulanıklaşmadan önce bulanıklaşıyor.
Düzenleme:
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' animasyonunun bahar animasyonuyla çalışacağından emin değilim. – Sulthan
@sulthan hmm, garip. Titreşimsiz – Erik
@ Paulw11 istisnasıyla doğru bir şekilde animasyon yapılabileceğini düşünürsek kısmen işe yarayabilir, ancak nasıl olmasa, eğer nervürlü olmasa bile niliyeti ayarlayarak tam olarak saydamlaşabilir misiniz? - Aslında olduğu gibi, titreşim – Erik