我想模糊整个屏幕包括状态栏,然后在它上面呈现UIImageView,但事实证明这很困难。
iOS 7的截图方法drawViewHierarchyInRect:afterScreenUpdates:
返回一个非常容易模糊和呈现的UIImage,但不包括状态栏(至少默认情况下),所以它不能像我想的那样工作至。另一个snapshotViewAfterScreenUpdates:
,返回一个带有状态栏的UIView (耶!)但不幸的是因为它是一个UIView我不知道如何模糊它。
我可以快速将UIView转换为UIImage以模糊吗?第一种方法可以以某种方式包含状态栏吗?我可以有效地模糊UIView吗?
我只是试图模糊整个屏幕(包括状态栏)以在其上显示图像。如果我忽略了其他方式,请随意提及。
答案 0 :(得分:0)
您是否尝试在应用窗口中调用drawViewHierarchyInRect:afterScreenUpdates:
?窗口/应该/包含状态栏。从那里你获得图像,然后应用你想要的任何效果。
答案 1 :(得分:-1)
如果您有UIView,可以执行以下操作将其转换为图像:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){
UIGraphicsBeginImageContextWithOptions(YOUR_UIVIEW.bounds.size, NO, [UIScreen mainScreen].scale);
//if it is retina display
}
else{
UIGraphicsBeginImageContext(YOUR_UIVIEW.bounds.size);
//no retina display
}
[YOUR_UIVIEW.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData = UIImagePNGRepresentation(image);
您可以在图像中使用*图像,或者在任何地方转换* imageData。
答案 2 :(得分:-1)
为什么不对drawViewHierarchyInRect:afterScreenUpdates:
的结果致电snapshotViewAfterScreenUpdates:
?这样你就可以获得UIView中的状态栏(而不是它自己的UIWindow),然后创建和修改UIImage。
extension UIScreen {
class func screenshotView() -> UIView {
return mainScreen().snapshotViewAfterScreenUpdates(false)
}
class func screenshot() -> UIImage {
let view = screenshotView()
UIGraphicsBeginImageContext(view.bounds.size)
view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return screenshot
}
}