相关疑难解决方法(0)

如何以编程方式拍摄屏幕截图(Swift,SpriteKit)

我尝试了所建议的但是输出是一个白色的空白截图.这让我想到我没有在视图中添加任何内容.这是我在视图中添加图形的方法.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)

任何的意见都将会有帮助

uigraphicscontext sprite-kit skview swift

10
推荐指数
1
解决办法
4580
查看次数

不使用桥接头访问私有UIKit功能

考虑私有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; .

objective-c uikit iphone-privateapi ios swift

10
推荐指数
1
解决办法
1725
查看次数