今天我决定制作自己的动画,而不是使用UINavigationController
的动画。所以我设计了一个动画(后来是伪代码),但是当我开始编写代码时,我偶然发现了。我认为如果能上课,我会分享它会很好。
首先让我用文字解释一下,有两个视图控制器,当推动后一个视图控制器时,前视图控制器的视图应该模糊,然后后者的模糊图像应该进入。以前的模糊图像应该被隐藏,最后后一个图像的模糊应该解决,以正确显示后一个视图控制器。
我用[UIImage convertViewToImage]
正确地获得了前VC的图像,但是我无法获得后者VC的图像。
如果我想用相同的逻辑获取它的快照,我必须推新VC,但你可能会理解它似乎并不优化和实用。
让我展示代码:
- (void)makeLastBackgroundBlur
{
self.lastBackgroundView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIImage *image = [[UIImage convertViewToImage] applyBlurWithRadius:5.0
tintColor:[UIColor colorWithWhite:0.2
alpha:0.7]
saturationDeltaFactor:1.8
maskImage:nil];
self.lastBackgroundView.image = image;
self.lastBackgroundView.alpha = 0;
[self addSubview:self.lastBackgroundView];
}
- (void)makeNextBackgroundBlur
{
self.nextBackgroundView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
// The part I couldn't do
UIImage *image = [theImageOfTheLatterVC applyBlurWithRadius:5.0
tintColor:[UIColor colorWithWhite:0.2
alpha:0.7]
saturationDeltaFactor:1.8
maskImage:nil];
self.nextBackgroundView.image = image;
self.nextBackgroundView.alpha = 1;
self.nextBackgroundView.hidden = YES;
[self addSubview:self.nextBackgroundView];
}
- (void)invokeAnimation
{
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
// Invoke the blurred background with animation
[UIView animateWithDuration:(self.duration / 2.00)
animations:^{
self.lastBackgroundView.alpha = 1.0f;
}
completion:^(BOOL finished){
self.nextBackgroundView.hidden = NO;
[UIView animateWithDuration:(self.duration / 2.00)
animations:^{
self.nextBackgroundView.alpha = 0;
} completion:^(BOOL finished){
self.lastBackgroundView = nil;
}];
}];
}