2014年12月20日土曜日

WKWebView スクリーンショット

UIWebViewで簡単に取得できたスクリーンショットも, WKWebViewでは同じ方法ではできません.

オリジナルはこちら (English),WKWebView Screenshots

UIViewのみを取得したい場合

snapshotViewAfterScreenUpdates を利用します。これだけで, UIViewまではO.K.です Objective-C
UIView *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 件のコメント:

コメントを投稿