1

基本上,我正在尝试使用 SpringBoard 的私有 API SBAppContextHostManager 显示应用程序。到目前为止,我有这个代码:

SBAppContextHostManager *app = [[objc_getClass("SBAppContextHostManager") alloc] init];

[app setAppBundleID:@"com.apple.springboard"]; // just as an example

[app enableHostingForRequester:@"uniqueID" priority:1];

[app orderRequesterFront:@"uniqueID"];

SBHostWrapperView *view = [app hostViewForRequester:@"uniqueID"];

然后我打电话

UIGraphicsBeginImageContextWithOptions([UIScreen mainScreen].bounds.size, YES, [UIScreen mainScreen].scale);
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetAllowsAntialiasing(c, YES);
[view.layer renderInContext:c];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

获取包含应用程序的视图的 UIImage。但是,这个 UIImage 的输出是完全空白的,这导致我认为我对 SBAppContextManager 的调用不正确,从而导致空白 SBHostWrapperView。因此,我应该如何以这种方式显示应用程序?

4

1 回答 1

0

如果您尝试预览应用程序,则呈现 SBHostWrapperView 将不起作用。你看,SBHostWrapperViews 不会复制应用程序的渲染输出,它只是在屏幕上提供一个不同的位置供应用程序渲染到。

相反,您可以- (SBFullscreenZoomView*)systemGestureSnapshotWithIOSurfaceSnapshotOfApp:(SBApplication*)arg1 includeStatusBar:(BOOL)arg2;SBUIController课堂上使用。

该方法返回一个 SBFullscreenZoomView,它是 UIView 的一个子类,并带有 arg1 中提供的应用程序的快照。您可以使用您提供的第二段代码来获取 SBFullscreenZoomView 的 UIImage。这应该可以满足您的要求,为您提供仅特定应用程序的屏幕截图。

于 2013-08-04T22:04:03.677 回答