オリジナルはこちら (English),WKWebView Screenshots
UIViewのみを取得したい場合
snapshotViewAfterScreenUpdates を利用します。これだけで, UIViewまではO.K.です Objective-CUIView *capturedView = [self snapshotViewAfterScreenUpdates:NO];swift
var capturedView : UIView? = self.snapshotViewAfterScreenUpdates(false)このUIViewは, 通常の方法でUIImageに変換できません。 drawViewHierarchyInRectを使うと, 常に NO, false が返ってきます UIViewを, Contextに描画できないようです シミュレータを使うと, drawViewHierarchyInRectでも描画できますが, 実機だと上記のようなことが起こります(iPhone5s, iPhone4s)
UIImageにしたい場合
上の方法だと実機で, UIView, UIImageのコンバートに失敗します ScrollViewの内容をそのまま描画してImageにしてしまえば, 実機でもうまくいきます- (UIImage *)screenCapture {
CGSize size = self.scrollView.contentSize;
UIGraphicsBeginImageContextWithOptions(size, YES, 0);
[self drawViewHierarchyInRect:CGRectMake(self.bounds.origin.x, self.bounds.origin.y, size.width, size.height) afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
- (UIImage *)screenCapture:(CGSize)size {
UIGraphicsBeginImageContext(size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGFloat scale = size.width / self.layer.bounds.size.width;
CGAffineTransform transform = CGAffineTransformMakeScale(scale, scale);
CGContextConcatCTM(ctx, transform);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:NO];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
0 件のコメント:
コメントを投稿