2017-03-18 3 views
-3

nicht konvertieren - (nullable UIView *)resizableSnapshotViewFromRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates withCapInsets:(UIEdgeInsets) Snapshot von einer UIView, die eine AVCaptureVideoPreviewLayer enthalten, und dann möchte ich das Ergebnis (UIView *) in UIImage konvertieren, und zeigen Sie, aber die UIImage ist leer die ganze Zeit.Kann UIView in UIImage auf 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]; 

Wusste jemand, warum das nicht das richtige UIImage bekommen kann?

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

Antwort

-1

ich weiß nicht, die Objective-C-Version davon, aber versuchen Sie es selbst, zu Obj-C zu konvertieren und diesen Code hinzu:

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

es hinzufügen nach

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

aber vor

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

+0

'[Foto.layer renderInContext: UIGraphicsGetCurrentContext()];' funktioniert nicht – leezhm

+0

@leezhmhm Hm .. Ich dachte, es würde funktionieren .. Bist du sicher, dass deine UIView gezeichnet wurde? Sie senden 'afterScreenUpdates: YES' in diese Zeichenfunktion, wissen Sie, was dieser Code bedeutet? Ich nicht .. Vielleicht wartet es mit dem Zeichnen der Ansicht, bis der Bildschirm bereit ist, aber der Rest Ihres Codes wird sofort angezeigt. Versuchen Sie es in "NEIN" zu ändern? – Sti

+0

versuchen, JA und NEIN, es funktioniert nicht! Mein Projekt ist eine iPad-App, und ich fand dieses Thema https://github.com/jfradj/ScreenshotIssue http://stackoverflow.com/questions/25432222/drawviewhierarchyinrectafterscreenupdates-and-renderincontext-dont-work-ot – leezhm

-1

Verwenden Sie die folgende Methode (ungetestet):

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

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

    return image 
} 

Und rufen:

UIImage *img = [self renderViewToImage:photo] 

Vielleicht möchten sie eine Kategorie UIView machen.

+0

testen Sie Ihren Code und es hat nicht funktioniert – leezhm

+0

Ich habe nicht die Chance, im Moment zu testen. Versuchen Sie 'view.bounds.size' anstelle von' view.frame.size'. Und lassen Sie uns wissen, was passiert "funktioniert nicht". – shallowThought

+0

hat nicht funktioniert! Mein Projekt ist eine iPad App, und ich habe dieses https://github.com/jfradj/ScreenshotIssue gefunden – leezhm

Verwandte Themen