オリジナルはこちら (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 件のコメント:
コメントを投稿