2016-08-04 89 views
0

Ich verwende eine Methode, um UIView in UIImage umzuwandeln, und es macht eine großartige Arbeit, wenn UIView (in UIImage konvertiert wird) bereits vorhanden/angezeigt wird. Aber meine Anforderung besteht darin, UIView in UIImage zu konvertieren, ohne UIView anzuzeigen. Leider versagt dieser Code in diesem Fall und ich stecke fest. Jede Hilfe wird geschätzt.Covert UIVIew zu UIImage ohne UIView anzuzeigen/anzuzeigen

Ich verwende die folgende Methode:

+ (UIImage *) imageWithView:(UIView *)view 
{ 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque,  [[UIScreen mainScreen] scale]); 
    [view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage * img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return img; 
} 
+0

Verstecken Sie einfach die UIView und erhalten Sie Ihre Konvertierung des Bildes. –

+0

Versteckte Ansicht funktionierte nicht für mich, ich habe das auch versucht. – Abid

Antwort

1

Ihr Code wahrscheinlich versagt, weil Sie nicht die Subviews Ihrer Ansicht Auslegen (die automatisch erfolgt, wenn Sie eine Ansicht als Subview hinzufügen). Versuchen Sie so etwas wie die Methode, die ich unten schrieb:

+ (UIImage *)imageFromView:(UIView *)view sized:(CGSize)size 
{ 
    // layout the view 
    view.frame = CGRectMake(0, 0, size.width, size.height); 
    [view setNeedsLayout]; 
    [view layoutIfNeeded]; 

    // render the image 
    UIGraphicsBeginImageContextWithOptions(size, view.opaque, 0.0f); 
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; 
    UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return renderedImage; 
} 
+0

dieser hat auch nicht für mich funktioniert. – Abid

+0

sagen, es ist "nicht funktioniert" ist nicht hilfreich. was ist los? –

+0

Ansicht wird nicht mit dem obigen Code in Bild konvertiert. Dies funktioniert nur, wenn die Ansicht auf dem Bildschirm angezeigt wird. – Abid

0

Angenommen, Sie haben bereits eine Arbeitsansicht bekam, sollte dieser Code arbeiten, um die UIView zu einem UIImage zu konvertieren (ich bin mit einem Gradienten in ein Bild umzuwandeln und anzeigen des Bildes auf einem UIProgressView

Swift:.

let renderer = UIGraphicsImageRenderer(size: gradientView.bounds.size) 
let image = renderer.image { ctx in 
      gradientView.drawHierarchy(in: gradientView.bounds, afterScreenUpdates: true) 
} 

Objective C:

UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:gradientView.bounds.size]; 
UIImage *gradientImage = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) { 
     [gradientView drawViewHierarchyInRect:gradientView.bounds afterScreenUpdates:true]; 
    }]; 

_progressView.progressImage = gradientImage; 

Der obige Code sollte es Ihnen ermöglichen, alle UIView in eine UIImage zu konvertieren. Sie sollten es idealerweise in viewWillAppear ausführen (da der View-Controller zu diesem Zeitpunkt die richtigen Layout-Größen hat). Wenn Sie Probleme haben, dies zu tun, können Sie sich diese Beispielprojekte ansehen, die ich für einen Leitfaden zu diesem Thema erstellt habe! Objective C, Swift.