Ist es möglich, einen UIImage von einer UIView zu erhalten, die mit snapshotViewAfterScreenUpdates
erstellt wurde?UIImage aus einer UIView, die mit snapshotViewAfterScreenUpdates erstellt wurde:
A UIView aus snapshotViewAfterScreenUpdates
zurück sieht gut aus, wenn sie als ein Subview hinzugefügt, aber die folgenden erzeugt ein schwarzes Bild:
UIView *snapshotView = [someView snapshotViewAfterScreenUpdates:YES];
UIImage *snapshotImage = [self imageFromView:snapshotView];
- (UIImage *)imageFromView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);
// [view.layer renderInContext:UIGraphicsGetCurrentContext()]; // <- same result...
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
Es ist natürlich möglich, das Bild zu erhalten, ohne sich auf snapshotViewAfterScreenUpdates
:
UIImage *snapshotImage = [self imageFromView:someView];
Leider kann drawViewHierarchyInRect
beim Erfassen einer komplexen Ansicht nicht mit der Geschwindigkeit snapshotViewAfterScreenUpdates
übereinstimmen. Ich hatte gehofft, dass es schneller wäre, die UIImage
von einer Ansicht zu erhalten, die von snapshotViewAfterScreenUpdates
erzeugt wird, ist das möglich?
Ich denke, der Grund, warum dies nicht funktioniert, ist, dass die von Snapshot zurückgegebene Ansicht tatsächlich keine vollständige Ansicht ist. Wenn Sie den Debugger durchlaufen, sehen Sie, dass der Typ '_UIReplicantView' ist. Dies lässt mich denken, dass es nur eine optimierte Kopie der anderen Ansicht ist und nicht die gleichen 'Schicht' Eigenschaften eines 'vollen' UIView hat ... – MobileVet
Danke @MobileVet, das ist gut zu wissen. Immer noch frustrierend, dass es keine Möglichkeit gibt, die Pixel von einem Feature zu erhalten, das sich nur um eine schnelle Bildschirmaufnahme dreht ... – carton
Apple bestätigt, dass dies nicht möglich ist. Siehe: http://www.raywenderlich.com/forums/viewtopic.php?f=37&t=8993&start=10 –