snapshotViewAfterScreenUpdates
で作成されたUIViewからUIImageを取得することは可能ですか?
snapshotViewAfterScreenUpdates
から返されたUIViewは、サブビューとして追加すると正常に見えますが、次のように黒い画像が生成されます。
UIView *snapshotView = [someView snapshotViewAfterScreenUpdates:YES];
UIImage *snapshotImage = [self imageFromView:snapshotView];
- (UIImage *)imageFromView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);
// [view.layer renderInContext:UIGraphicsGetCurrentContext()]; // <- same result...
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
もちろん、snapshotViewAfterScreenUpdates
に依存せずにイメージを取得することもできます。
UIImage *snapshotImage = [self imageFromView:someView];
残念ながら、複雑なビューをキャプチャする場合、drawViewHierarchyInRect
はsnapshotViewAfterScreenUpdates
の速度と一致できません。 UIImage
によって作成されたビューからsnapshotViewAfterScreenUpdates
を取得する方が速くなることを望んでいましたが、これは可能ですか?
答えは[〜#〜] no [〜#〜]のようであり、Appleの documentation はこれを暗黙的に確認します。
スナップショットにぼかしなどのグラフィック効果を適用する場合は、
drawViewHierarchyInRect:afterScreenUpdates:
メソッドの代わりに。
WWDC13からのImplementing Engaging UI on iOSセッションはsnapshotViewAfterScreenUpdates
を最速のメソッドとしてリストしていますが、サンプルコードではdrawViewHierarchyInRect
を使用しています。