Wie mache ich einen Screenshot im Sprite Kit?
-
20-12-2019 - |
Frage
Wenn ich versuche, einen Screenshot in Spritekit zu machen.Ich habe alle Methoden ausprobiert, die ich online finden kann.Sie funktionieren nicht.
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *gameOverScreenImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
funktioniert einfach nicht
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, scale);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
ich kann mich nicht selbst erkennen.grenzen und Maßstab.
Lösung
Ich bin mir nicht sicher, ob -drawViewHierarchyInRect:afterScreenUpdates:
soll mit SKView funktionieren (nehme ich an), aber der Grund, warum das zweite Beispiel nicht kompiliert wird, ist, dass (1) Sie versuchen, es aufzurufen und bounds
auf self
(vermutlich ein UIViewController) anstatt self.view
und (2) Sie haben den Wert von nicht definiert scale
.Ändern Sie einfach diese beiden Zeilen:
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);
[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES];
Auch der zweite Parameter zu UIGraphicsBeginImageContextWithOptions
—"undurchsichtig" - sollte nicht NEIN sein, es sei denn, Ihre Ansicht ist transparent, und das Setzen von "afterScreenUpdates" auf JA ist nur unter bestimmten Umständen erforderlich, die diese wahrscheinlich nicht enthalten.Sie können eine bessere Leistung sehen, indem Sie diese ändern.