Screenshot showing up blank - Swift

后端 未结 2 572
甜味超标
甜味超标 2020-11-29 11:28

Hi I am making a game and I have added a share button to the game. I want the user to be able to share a message, URL, and screenshot along side each other in one message.Th

相关标签:
2条回答
  • 2020-11-29 12:07

    update: Xcode 8.2.1 • Swift 3.0.2

    You need to add the import statement and this extension to your game scene:

    import UIKit 
    

    extension UIView {
        var snapshot: UIImage? {
            UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0)
            defer { UIGraphicsEndImageContext() }
            drawHierarchy(in: bounds, afterScreenUpdates: true)
            return UIGraphicsGetImageFromCurrentImageContext()
        }
    }
    

    let myImage = view?.snapshot
    
    0 讨论(0)
  • 2020-11-29 12:22

    In WWDC 2015, What's new in UIVisualEffectView, a solution is "glossed over" for capturing a screenshot of a UIVisualEffectView containing a vibrancy label and a blur. The problem that often arises is that Apple's screenshot API tends not to capture the UIVisualEffect, resulting in a screenshot of the view without the visual effect. The solution according to WWDC 2015 involves capturing the snapshot at the window/screen; unfortunately, sample code was not shown. Following is my own implementation:

    //create snapshot of the blurView
    let window = UIApplication.sharedApplication().delegate!.window!!
    //capture the entire window into an image
    UIGraphicsBeginImageContextWithOptions(window.bounds.size, false, UIScreen.mainScreen().scale)
    window.drawViewHierarchyInRect(window.bounds, afterScreenUpdates: true)
    let windowImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    //now position the image x/y away from the top-left corner to get the portion we want
    UIGraphicsBeginImageContext(blurView.frame.size)
    windowImage.drawAtPoint(CGPoint(x: -blurView.frame.origin.x, y: -blurView.frame.origin.y))
    let croppedImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext();
    //embed image in an imageView, supports transforms.
    let resultImageView = UIImageView(image: croppedImage)
    

    Note: This snapshot code will only work once ViewDidAppear has been called.

    0 讨论(0)
提交回复
热议问题