我尝试了所建议的但是输出是一个白色的空白截图.这让我想到我没有在视图中添加任何内容.这是我在视图中添加图形的方法.addChild方法附带SpriteKit,它接收SKSpriteNodes:
addChild(background)
addChild(rate)
addChild(scoreLabel)
addChild(share)
addChild(playAgain)
addChild(highScoreLabel)
addChild(scoreBackground)
addChild(highScoreBackground)
Run Code Online (Sandbox Code Playgroud)
以下是截取屏幕截图的方法:
UIGraphicsBeginImageContext(self.view!.bounds.size)
self.view!.layer.renderInContext(UIGraphicsGetCurrentContext())
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)
Run Code Online (Sandbox Code Playgroud)
任何的意见都将会有帮助
考虑私有C函数_UICreateScreenUIImage,它返回UIImage当前设备屏幕的快照:
OBJC_EXTERN UIImage *_UICreateScreenUIImage(void) NS_RETURNS_RETAINED;
Run Code Online (Sandbox Code Playgroud)
我可以将它放在一个桥接头中,并在Swift中访问它,如下所示:
MyApp的桥接,Header.h
@import UIKit;
UIImage *_UICreateScreenUIImage(void) NS_RETURNS_RETAINED;
Run Code Online (Sandbox Code Playgroud)
MyClass.swift
let image = _UICreateScreenUIImage()
print(image) // <UIImage: 0x7fc4ba6081c0>, {375, 667}
Run Code Online (Sandbox Code Playgroud)
有没有办法_UICreateScreenUIImage在纯粹的Swift中访问而不使用桥接头?
最初的想法是创建一个扩展UIImage,但扩展期望我在扩展中声明函数的主体:
extension UIImage {
public func _UICreateScreenUIImage(_: Void) -> UIImage // "Expected '{' in body of function declaration"
}
Run Code Online (Sandbox Code Playgroud)
无论如何,这种实现都是有缺陷的,因为_UICreateScreenUIImage它不是一种方法UIImage.
是否可以在纯Swift中公开和访问此方法?
人们似乎把我的问题与"如何截取屏幕截图?"混淆了.那不是我要问的.我问我如何访问UIImage *_UICreateScreenUIImage(void);Swift中的方法.它可以是任何私有方法,例如+(UIImage *)_deviceSpecificImageNamed:(NSString *)name inBundle:(NSBundle *)bundle;或+(UIImage *)_pu_PhotosUIImageNamed:(NSString *)name;
.