尝试为模态视图创建模糊背景的问题
Problems trying to create blurred background for modal view
我正在尝试以模态方式显示视图。该视图显示为 "Cross Dissolve" "over full screen"。我正在将屏幕截图传递给控制器。然后我试图裁剪屏幕截图并仅保留视图下的部分。我正在模糊并添加到视图中。
就模糊而言,代码有效,但我有两个问题。
1)图像是双比例的,这与视网膜显示有关,但我不确定如何解决这个问题。
2) 另一个是,在尝试了我能想到的一切之后,我无法在帮助我正确裁剪视图的坐标系中获得 "canvas" 的坐标。
非常感谢对此的帮助
谢谢
卡尔
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let window = appDelegate.window!
let splitViewController = window.rootViewController as! UISplitViewController;
let cropFrame = UIView().convertRect(self.canvas.frame, toView: splitViewController.view)
let croppedScreenShotCG = CGImageCreateWithImageInRect(screenShot?.CGImage, cropFrame)
let croppedScreenShot = UIImage(CGImage:croppedScreenShotCG)
var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
var blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = CGRectMake(0, 0, self.canvas.frame.width, self.canvas.frame.height)
let blurImageView = UIImageView(image:croppedScreenShot)
blurImageView.addSubview(blurEffectView)
let blurColorCast = UIView(frame: CGRectMake(0, 0, self.canvas.frame.width, self.canvas.frame.height))
blurColorCast.backgroundColor = UIColor.cloverColor10pc()
blurColorCast.alpha = 0.2
blurImageView.addSubview(blurColorCast)
self.canvas.addSubview(blurImageView)
self.canvas.sendSubviewToBack(blurImageView)
UIImageWriteToSavedPhotosAlbum(croppedScreenShot, nil, nil, nil)
}
我得到的屏幕截图是这样的:
let layer = window.layer
let scale = UIScreen.mainScreen().scale
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale);
layer.renderInContext(UIGraphicsGetCurrentContext())
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
您可以使用 imageWithCGImage:scale:orientation:
而不是使用 UIImage 的 CGImage:
,它采用比例参数来考虑视网膜屏幕。
但我个人更愿意避免在代码中做任何事情,如果有合理的方法可以用故事板来做的话。
这是一个 example project 模态演示文稿的背面有模糊效果,根本不使用 任何 代码。
唯一值得注意的是,对于正在呈现的视图控制器,根视图背景颜色设置为清除(否则呈现它的视图控制器将被遮挡)。
我正在尝试以模态方式显示视图。该视图显示为 "Cross Dissolve" "over full screen"。我正在将屏幕截图传递给控制器。然后我试图裁剪屏幕截图并仅保留视图下的部分。我正在模糊并添加到视图中。
就模糊而言,代码有效,但我有两个问题。 1)图像是双比例的,这与视网膜显示有关,但我不确定如何解决这个问题。 2) 另一个是,在尝试了我能想到的一切之后,我无法在帮助我正确裁剪视图的坐标系中获得 "canvas" 的坐标。
非常感谢对此的帮助 谢谢 卡尔
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let window = appDelegate.window!
let splitViewController = window.rootViewController as! UISplitViewController;
let cropFrame = UIView().convertRect(self.canvas.frame, toView: splitViewController.view)
let croppedScreenShotCG = CGImageCreateWithImageInRect(screenShot?.CGImage, cropFrame)
let croppedScreenShot = UIImage(CGImage:croppedScreenShotCG)
var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
var blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = CGRectMake(0, 0, self.canvas.frame.width, self.canvas.frame.height)
let blurImageView = UIImageView(image:croppedScreenShot)
blurImageView.addSubview(blurEffectView)
let blurColorCast = UIView(frame: CGRectMake(0, 0, self.canvas.frame.width, self.canvas.frame.height))
blurColorCast.backgroundColor = UIColor.cloverColor10pc()
blurColorCast.alpha = 0.2
blurImageView.addSubview(blurColorCast)
self.canvas.addSubview(blurImageView)
self.canvas.sendSubviewToBack(blurImageView)
UIImageWriteToSavedPhotosAlbum(croppedScreenShot, nil, nil, nil)
}
我得到的屏幕截图是这样的:
let layer = window.layer
let scale = UIScreen.mainScreen().scale
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale);
layer.renderInContext(UIGraphicsGetCurrentContext())
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
您可以使用 imageWithCGImage:scale:orientation:
而不是使用 UIImage 的 CGImage:
,它采用比例参数来考虑视网膜屏幕。
但我个人更愿意避免在代码中做任何事情,如果有合理的方法可以用故事板来做的话。
这是一个 example project 模态演示文稿的背面有模糊效果,根本不使用 任何 代码。
唯一值得注意的是,对于正在呈现的视图控制器,根视图背景颜色设置为清除(否则呈现它的视图控制器将被遮挡)。