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クラスで使用できます。

このメソッドは、UIView のサブクラスである SBFullscreenZoomView を、arg1 で提供されるアプリのスナップショットと共に返します。提供したコードの 2 番目のスニペットを使用して、SBFullscreenZoomView の UIImage を取得できます。これは、特定のアプリケーションのみのスクリーンショットを提供して、あなたが求めていることを行うはずです.

于 2013-08-04T22:04:03.677 に答える