0

我正在尝试以模态方式显示视图。该视图显示为“交叉溶解”“全屏”。我将屏幕截图传递给控制器​​。然后我尝试裁剪屏幕截图并仅保留视图下的部分。我正在模糊并添加到视图中。

代码就模糊而言有效,但我有两个问题。1)图像是双倍的,这与视网膜显示有关,但我不知道如何解决这个问题。2)另一个是,在尝试了我能想到的一切之后,我无法在有助于我正确裁剪视图的坐标系中获得“画布”的坐标。

我真的很感谢你的帮助谢谢卡尔

    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()
4

1 回答 1

0

除了使用 UIImage 之外,CGImage:您还可以使用imageWithCGImage:scale:orientation:它采用比例参数来说明视网膜屏幕。

请参阅:https ://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImage_Class/#//apple_ref/occ/clm/UIImage/imageWithCGImage:scale:orientation :

但我个人更喜欢避免在代码中做任何事情,如果有一种合理的方法可以用故事板来做的话。

这是一个示例项目,它对完全不使用任何代码的模态演示文稿的背面具有模糊效果。

唯一值得注意的是,对于正在呈现的视图控制器,根视图背景颜色设置为清除(否则呈现它的视图控制器将被遮挡)。

于 2015-09-13T02:44:06.850 回答