iOS 从毛玻璃底效果到淡出效果实现

实现原理:弹出图片时截取屏幕图,做模糊处理,并作为毛玻璃底效果显示

淡出时,使用切换动画,逐渐显示高清图片,最后切换回原界面

在iOS8中可以使用UIBlurEffect和UIVisualEffectView实现,使用起来很简单

下面是代码实现:

// 高清截图代码

- (UIImage *)captureScreen {
    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
    CGRect rect = [keyWindow bounds];
    UIGraphicsBeginImageContextWithOptions(rect.size, NO , 0.0f);    // 高清,效率比较慢
    // UIGraphicsBeginImageContext(size);    // 不要求高清可以使用这个
    CGContextRef context = UIGraphicsGetCurrentContext();
    [keyWindow.layer renderInContext:context];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

// 模糊处理

UIImage *screenCaptureImage = [self captureScreen];
    UIImage *blurImage = [UIImageEffects imageByApplyingBlurToImage:screenCaptureImage
                                                         withRadius:80.0f
                                                          tintColor:[UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.6f]
                                              saturationDeltaFactor:1.8f
                                                          maskImage:maskImage];

显示使用imageview就可以


接下来实现淡出的效果:必须使用两个uiimageview,一个显示高清,一个显示毛玻璃底,frame一样,且刚开始时高清的为透明,当想淡出时调用

[UIView animateWithDuration:0.7 animations:^{
        self.imageView.alpha = 0;        // 毛玻璃底的imageview
        self.screenImageView.alpha = 1;    // 高清deimageview
    }completion:^(BOOL finish) {
            [_delegate publishTypeSelectViewControllerDidCancel:self];   // 消掉controller,不能用动画
    }];


在iOS8后实现该效果很简单,系统提供的类用法和UIView差不多,使用方便 就不贴代码了

你可能感兴趣的:(毛玻璃底,Controller淡出)