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
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
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.