なんらかの理由で、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;
}
どんな助けでも大歓迎です!