Pourquoi ne pouvons-nous pas simplement revenir image? Pourquoi avoir besoin de faire ça? self.init(cgImage: cgImage)
Andrey Gagan
@AndreyGagan AFAIK, vous ne pouvez pas "remplacer" self par le nouvellement créé UIImagedans un constructeur, mais vous pouvez enchaîner via le UIImage.init(cgImage: )constructeur à la place.
Alnitak
2
L'image n'est pas créée avec une échelle appropriée. Par exemple, lorsque la taille est 1x1, une image 2x2 est renvoyée lorsque l'échelle de l'écran principal est 2.0. Vous devriez appelerself.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
Marián Černý
92
Voici une autre option. Je crois que vous vouliez un objet UIImage exact.
Je pense qu'il n'y a pas de méthode UIRectMake(0, 0, size.width, size.height), cela semble être le bon: CGRectMake(0, 0, size.width, size.height).
Henry Pham
1
En règle générale, essayez d'utiliser letau lieu de varpour les variables immuables; ici semble que ni rectni imagene devrait utiliser la vardéclaration.
Cela produit probablement l'effet recherché par OP, mais cela ne vaut rien qu'ils aient une méthode pour créer un UIImage, pas pour définir un UIImageView.
ttarik
Votre deuxième méthode crée toujours une vue d'image, pas une image, ce que @ ev0lution soulignait.
rdelmar
modifier 3 ci-joint. Maintenant, nous avons un tas de moyens. Le dernier avec un UIImageView.
Steve Rosenberg
1
La méthode getImageWithColor(color: UIColor, size: CGSize) -> UIImageest suffisante comme réponse, car je pense que tout le monde ne l'utilisera pas avec une UIImageView
Henry Pham
Comment rendre ces images plus rondes?
Umair Afzal
9
Une modification mineure de l'excellente réponse de @ neoneye, permettant au code appelant de ne pas avoir besoin de créer le CGSize, et a modifié le nom pour ne pas entrer en collision avec de nombreux autres:
Je pense que certaines réponses ici sont un peu trompeuses. La plupart du temps, vous devrez spécifier la taille de l'image, pas un cas spécifique (comme 1x1). Mais c'est une belle approche.
UIImage
n'a pas de-initWithSize:andColor:
méthode, maisNSImage
sur OS X. Utilisez-vous une bibliothèque ou une catégorie personnalisée pour cela?Réponses:
Une autre solution intéressante, compatible Swift 2.2 , est de créer un autre constructeur dans UIImage, de cette manière:
De cette façon, vous pouvez créer l'image colorée personnalisée de cette manière:
Ou, éventuellement, créez l'image avec une taille personnalisée:
Swift 3.0
la source
UIGraphicsBeginImageContextWithOptions(rect.size, true, 1.0)
réf: developer.apple.com/library/ios/documentation/UIKit/Referenceimage
? Pourquoi avoir besoin de faire ça?self.init(cgImage: cgImage)
UIImage
dans un constructeur, mais vous pouvez enchaîner via leUIImage.init(cgImage: )
constructeur à la place.self.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
Voici une autre option. Je crois que vous vouliez un objet UIImage exact.
Collez ceci dans votre code Swift et appelez-le
Swift 3.1:
la source
UIRectMake(0, 0, size.width, size.height)
, cela semble être le bon:CGRectMake(0, 0, size.width, size.height)
.let
au lieu devar
pour les variables immuables; ici semble que nirect
niimage
ne devrait utiliser lavar
déclaration.Version Swift 4:
Usage:
la source
Une approche plus propre consisterait à encapsuler la logique à l'intérieur d'une
UIImage
extension:Le consommateur peut désormais appeler
UIImage.imageWithColor(UIColor.blackColor())
pour créer une image sur fond noir.la source
Méthode similaire si vous voulez dessiner l'image vous-même ou en connecter une via IBOutlet.
Troisième méthode empruntant à anthonyliao. Un peu plus compliqué:
la source
UIImage
, pas pour définir unUIImageView
.getImageWithColor(color: UIColor, size: CGSize) -> UIImage
est suffisante comme réponse, car je pense que tout le monde ne l'utilisera pas avec une UIImageViewUne modification mineure de l'excellente réponse de @ neoneye, permettant au code appelant de ne pas avoir besoin de créer le CGSize, et a modifié le nom pour ne pas entrer en collision avec de nombreux autres:
Swift 4
la source
Vous pouvez utiliser la nouvelle API UIGraphicsImageRenderer iOS 10 .
Voici une extension sur UIColor dans Swift 3.1
la source
Une bonne façon est d'avoir une propriété calculée comme celle-ci:
Usage:
la source
Version Swift 3 de @anthonyliao Réponse acceptée:
la source
Rect avec coins arrondis
}
la source