La rotation UIImage en Swift
Je suis en utilisant Xcode 6.0.1 avec Swift. J'ai une UIImage, et je voudrais faire une autre image à l'aide de la vieille image de la source, avec la nouvelle image rotation d'une certaine façon... disons retourné verticalement.
Cette question a déjà été répondu à il y a quelques mois. Cependant, cette solution ne fonctionne pas pour moi, même si la situation est identique.
Quand j'ai
var image = UIImage(CGImage: otherImage.CGImage, scale: 1.0, orientation: .DownMirrored)
Xcode se plaint qu'il y a un "argument Supplémentaire d '"échelle" en appel". Après vérification avec la documentation d'Apple, cela n'a aucun sens, comme cette version de l'initialiseur de ne prendre que ces trois arguments. En laissant de côté la dimension et l'orientation des arguments n'résoudre le problème, mais m'empêche de faire la rotation.
La seule autre référence à ce que j'ai pu trouver est ce mec, qui avaient le même problème.
Qu'en pensez-vous?
J'ai besoin de courir sur cette version de Xcode, donc si il y a un autre moyen d'effectuer la rotation (je n'ai pas trouvé encore) qui serait utile.
- Xcode 6.0.1 est obsolète (je ne sais pas si c'est bien le problème). Votre code compile sans erreurs ou des avertissements dans mon Xcode 6.1. Seulement si vous omettez le
.CGImage
(comme dans le référencés github page) ensuite, vous aurez une erreur du compilateur. - Vous pouvez faire pivoter l'affichage de l'image de dessin de l'image facilement si vous le souhaitez dans ce Q/stackoverflow.com/questions/40882487/...
Vous devez vous connecter pour publier un commentaire.
Ici est une simple extension de UIImage:
(Source)
L'utiliser avec:
La première rotation d'une image et de le retourner si flip est définie sur true.
ImageView.tintColor
cesse de fonctionner après la rotation de l'image avec cette fonction. Même si j'essaye de réinitialiserimageWithRenderingMode
àAlwaysTemplate
. Aucune idée pourquoi?UIGraphicsBeginImageContext(rotatedSize)
devrait êtreUIGraphicsBeginImageContextWithOptions(rotatedSize, false, self.scale)
à préserver l'échelleCGContextDrawImage(bitmap, CGRectMake(-size.width / 2, -size.height / 2, size.width, size.height), CGImage)
. Changer debitmap?.draw( cgImage!, in: CGRect(x: -size.width / 2, y: -size.height / 2,width: size.width,height: size.height))
CGBitmapContextCreate: invalid data bytes/row: should be at least 7680 for 8 integer bits/component, 3 components, kCGImageAlphaPremultipliedFirst.
quelqu'un connaissait cette erreur?Swift 5 Solution
Ici est la solution la plus simple
et pour utiliser cette solution, vous pouvez effectuer les opérations suivantes
.pi
est de 180 degrés,.pi/2
est de 90 degrés,.pi/4
est de 45°, ...,.pi/180
est de 1 deg.Vous pouvez l'utiliser comme ceci:
Avec retournée indicateur spécifique:
'Argument supplémentaire en appel" se produit généralement lorsque l'un des types d'entrée est incorrect.
Vous pouvez corriger votre code avec
Swift 3:
Rotation à droite:
Testé dans l'aire de Jeux:
Essayer ce code, il a travaillé pour moi:
@confile réponse mis à jour à Swift 4
Ne pas utiliser
UIGraphicsBeginImageContext
parce qu'il va détruire la qualité de votre vecteur, utilisezUIGraphicsBeginImageContextWithOptions
. C'est ma mise en œuvre de Swift 3/4:Pour Swift 4.2
Cela fonctionne pour iOS 8+ et maintient la qualité de l'image. Il est à deux extensions pour UIImage.
Vérifier: