2017-03-18 6 views
-3

でUIViewをUIImageに変換できませんAVCaptureVideoPreviewLayerを含むUIViewからスナップショットを作成してから、結果(UIView *)をUIImageに変換して表示したいのですが、UIImageが空ですすべての時間。NewPad 9.3.5

CGRect frame = CGRectMake(0, 0, 768, 893); 
UIView *photo = [self.cameraView resizableSnapshotViewFromRect:frame afterScreenUpdates:YES withCapInsets:UIEdgeInsetsZero]; 

UIGraphicsBeginImageContextWithOptions(photo.bounds.size, NO, [[UIScreen mainScreen] scale]); 
[photo drawViewHierarchyInRect:photo.bounds afterScreenUpdates:YES]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

UIImageView * iv = [[UIImageView alloc] initWithImage:image]; 
[iv setFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; 
[self addSubview:iv]; 

CALayer * layer = [iv layer]; 
layer.borderWidth = 2.0f; 
layer.borderColor = [[UIColor orangeColor] CGColor]; 

誰もが正しいUIImageを取得できない理由を知っていましたか?

Xcode Version 8.2.1 (8C1002) MacOS Sierra 10.12.3(16D32) Deployment Target 9.3 iPad iOS 9.3.5

答えて

-1

私はこれのObjective-Cのバージョンを知っているが、OBJの-Cに自分自身をそれを変換し、このコードを追加しようとしないでください:

let context = UIGraphicsGetCurrentContext() 
photo.layer.render(in:context!) 

後にそれを追加します。

[photo drawViewHierarchyInRect:photo.bounds afterScreenUpdates:YES];

しかし

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

+0

'[photo.layer renderInContext:UIGraphicsGetCurrentContext()];' does not work – leezhm

+0

@leezhm Hm ..私はそれがうまくいくと思った..あなたのUIViewが描かれているのですか?そのdraw-functionで 'afterScreenUpdates:YES'を送ると、このコードが何を意味するのか分かりますか?私は..スクリーンが準備完了するまでビューを描画するのを待つかもしれませんが、コードの残りの部分がすぐに浮き立ちます。それを「いいえ」に変更してみてください。 – Sti

+0

YESとNOを試してください。うまくいかない!私のプロジェクトはiPadアプリです。このトピックが見つかりました。https://github.com/jfradj/ScreenshotIssue http://stackoverflow.com/questions/25432222/drawviewhierarchyinrectafterscreenupdates-and-renderincontext-dont-work-ot – leezhm

-1

は、以下の方法(未テスト)を使用します。

- (UIImage *)renderViewToImage:(UIView *)view 
{ 
    UIImage* image = nil; 

    UIGraphicsBeginImageContext(view.bounds.size);   
    [view.layer renderInContext: UIGraphicsGetCurrentContext()];   
    image = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext(); 

    return image 
} 

およびコール:

UIImage *img = [self renderViewToImage:photo] 

をあなたはそれUIViewに区分したいかもしれません。

+0

あなたのコードをテストしてくださいそれは動作しませんでした – leezhm

+0

私は瞬間にテストする機会がありません。 'view.frame.size'の代わりに' view.bounds.size'を試してみてください。そして、どうしたら「うまくいかないのか」を教えてください。 – shallowThought

+0

は機能しませんでした。私のプロジェクトはiPadアプリです。このhttps://github.com/jfradj/ScreenshotIssueが見つかりました – leezhm

関連する問題