18

なんらかの理由で、iPhone 6 シミュレーター (およびデバイス) のすべてのスクリーンショット方法にバグがある可能性があるようです。以下を含むスクリーンショットメソッドのいずれかを呼び出すときはいつでも:

snapshotViewAfterScreenUpdates: resizableSnapshotViewFromRect: drawViewHierarchyInRect:

afterScreenUpdates を YES に設定すると、画面がちらつきます。NO に設定すると、ちらつきは発生しませんが、必要な機能を得ることができません。

これらの方法は、iPhone 6 および 6+ を除く他のすべてのシミュレーターの iOS7.1 と iOS8 の両方で正常に機能します。

奇妙なことに、ストーリーボードを使用してまったく新しいプロジェクトを開始し、同様のコードを試してみると、ちらつきを再現できません。非ストーリーボード プロジェクトを使用してちらつきの gif を添付しました。

ここに画像の説明を入力

そして、これは非常に単純なView Controllerです:

    @implementation TestSnapshotController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Snap" style:UIBarButtonItemStylePlain target:self action:@selector(_snap)];

    self.blueView = [UIView new];
    self.blueView.backgroundColor = [UIColor blueColor];
    self.blueView.frame = CGRectMake(100.0f, 100.0f, 100.0f, 100.0f);
    [self.view addSubview:self.blueView];
}

- (void)_snap
{
    [self.blueView snapshotViewAfterScreenUpdates:YES];
}

@end

念のため、ここに私の AppDelegate を示します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    TestSnapshotController *testVC = [TestSnapshotController new];
    UINavigationController *rootNavVC = [[UINavigationController alloc] initWithRootViewController:testVC];

    self.window.rootViewController = rootNavVC;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    return YES;
}

どんな助けでも大歓迎です!

4

3 に答える 3

5

次のコードを実行すると、同じ問題が発生します。

[window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];

これまでに見つけた唯一の解決策は、アプリケーションが iPhone 6 および 6+ 用のサイズの起動イメージを持っていることを確認することであり、そうすればちらつきがなくなります。

于 2014-09-22T20:39:40.950 に答える
2

Ryans のソリューションに続いて、起動画面の xib (またはストーリーボード) を追加したところ、iPhone 6 および 6 plus の問題が解決されました。

したがって、プロジェクト設定で設定していることを確認してください。最終的には次のようになります。

ここに画像の説明を入力

于 2014-10-23T16:13:47.593 に答える
0

It seems to be a bug on Apple's side that occurs on scaled apps (those that have no design/assets/layout support for iPhone 6/6+) This one helped me get over it: snapshotViewAfterScreenUpdates glitch on iOS 8

Basically uses: [view.layer renderInContext:UIGraphicsGetCurrentContext()];

于 2015-02-11T18:22:31.530 に答える