Warum können wir nicht einfach zurückkehren image? Warum müssen Sie das tun? self.init(cgImage: cgImage)
Andrey Gagan
@AndreyGagan AFAIK, Sie können sich nicht durch das neu erstellte UIImagein einem Konstruktor "ersetzen" , aber Sie können über das verkettenUIImage.init(cgImage: ) stattdessen Konstruktor verketten.
Alnitak
2
Das Bild wird nicht mit dem richtigen Maßstab erstellt. Wenn beispielsweise die Größe 1x1 beträgt, wird ein Bild 2x2 zurückgegeben, wenn der Hauptbildschirm 2,0 beträgt. Sie sollten anrufenself.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
Marián Černý
92
Hier ist eine weitere Option. Ich glaube, Sie wollten ein genaues UIImage-Objekt.
Ich denke, es gibt keine Methode UIRectMake(0, 0, size.width, size.height), dies scheint die richtige zu sein : CGRectMake(0, 0, size.width, size.height).
Henry Pham
1
Versuchen Sie im Allgemeinen, letanstelle von varunveränderlichen Variablen zu verwenden. hier scheint weder rectnoch imagesollte varDeklaration verwendet werden.
Dies erreicht wahrscheinlich den Effekt, den OP wollte, aber es ist nichts wert, dass sie eine Methode hatten, um eine zu erstellen UIImage, nicht um eine zu setzen UIImageView.
Ttarik
Ihre zweite Methode erstellt immer noch eine Bildansicht, kein Bild, worauf @ ev0lution hingewiesen hat.
Rdelmar
bearbeiten 3 beigefügt. Jetzt haben wir eine Reihe von Möglichkeiten. Letzte mit einem UIImageView.
Steve Rosenberg
1
Die Methode getImageWithColor(color: UIColor, size: CGSize) -> UIImageist genug als Antwort, da ich denke, dass nicht jeder dies zusammen mit einem UIImageView
Henry Pham
Wie können wir diese Bilder runder machen?
Umair Afzal
9
Eine kleine Änderung an der hervorragenden Antwort von @ neoneye, die es dem aufrufenden Code ermöglicht, die CGSize nicht erstellen zu müssen, und der Name wurde geändert, um nicht mit zahlreichen anderen zu kollidieren:
Ich denke, einige Antworten hier sind etwas irreführend. Meistens müssen Sie die Größe des Bildes angeben, nicht einen bestimmten Fall (wie 1x1). Aber das ist ein schöner Ansatz.
Henry Pham
4
Swift 3-Version von @anthonyliao Akzeptierte Antwort:
UIImage
hat keine-initWithSize:andColor:
Methode, aberNSImage
unter OS X. Verwenden Sie hierfür eine benutzerdefinierte Bibliothek oder Kategorie?Antworten:
Eine andere nette Lösung, Swift 2.2- kompatibel, besteht darin, einen anderen Konstruktor in UIImage auf folgende Weise zu erstellen:
Auf diese Weise können Sie das benutzerdefinierte Farbbild folgendermaßen erstellen:
Oder erstellen Sie optional das Bild mit einer benutzerdefinierten Größe:
Swift 3.0
quelle
UIGraphicsBeginImageContextWithOptions(rect.size, true, 1.0)
: developer.apple.com/library/ios/documentation/UIKit/Reference/…image
? Warum müssen Sie das tun?self.init(cgImage: cgImage)
UIImage
in einem Konstruktor "ersetzen" , aber Sie können über das verkettenUIImage.init(cgImage: )
stattdessen Konstruktor verketten.self.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
Hier ist eine weitere Option. Ich glaube, Sie wollten ein genaues UIImage-Objekt.
Schreiben Sie dies in Ihren Swift-Code und nennen Sie es
Swift 3.1:
quelle
UIRectMake(0, 0, size.width, size.height)
, dies scheint die richtige zu sein :CGRectMake(0, 0, size.width, size.height)
.let
anstelle vonvar
unveränderlichen Variablen zu verwenden. hier scheint wederrect
nochimage
solltevar
Deklaration verwendet werden.Swift 4 Version:
Verwendung:
quelle
Ein sauberer Ansatz wäre, die Logik in einer
UIImage
Erweiterung zu kapseln :Jetzt kann der Verbraucher anrufen,
UIImage.imageWithColor(UIColor.blackColor())
um ein Bild mit schwarzem Hintergrund zu erstellen.quelle
Ähnliche Methode, wenn Sie das Bild selbst zeichnen möchten, anstatt eines über IBOutlet zu verbinden.
Dritte Methode aus Anthonyliao entlehnt. Etwas komplizierter:
quelle
UIImage
, nicht um eine zu setzenUIImageView
.getImageWithColor(color: UIColor, size: CGSize) -> UIImage
ist genug als Antwort, da ich denke, dass nicht jeder dies zusammen mit einem UIImageViewEine kleine Änderung an der hervorragenden Antwort von @ neoneye, die es dem aufrufenden Code ermöglicht, die CGSize nicht erstellen zu müssen, und der Name wurde geändert, um nicht mit zahlreichen anderen zu kollidieren:
Swift 4
quelle
Sie können den neuen iOS 10 UIGraphicsImageRenderer verwenden API verwenden.
Hier ist eine Erweiterung von UIColor in Swift 3.1
quelle
Ein guter Weg ist, eine berechnete Eigenschaft wie diese zu haben:
Verwendung:
quelle
Swift 3-Version von @anthonyliao Akzeptierte Antwort:
quelle
Rect mit abgerundeten Ecken
}}
quelle