获取推送视图控制器的快照

时间:2014-07-29 16:00:16

标签: ios uinavigationcontroller uiimage uiviewanimation

今天我决定制作自己的动画,而不是使用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;
                                          }];
                     }];
}

0 个答案:

没有答案