Tout rapide et sale techniques d'anti-aliasing pour une rotation UIImageView?
J'ai une UIImageView (full frame et rectangulaire) que je suis en rotation avec un CGAffineTransform. Le UIImage de la UIImageView remplit la totalité de l'image. Lorsque l'image est pivotée et dessiné les bords apparaissent nettement en dents de scie. Est-ce que je peux faire pour le rendre meilleur? Evidemment ce n'est pas être anti-aliasing avec l'arrière-plan.
- Est l'image interne d'anti-aliasing -- est-ce juste les bords sont irréguliers ou de l'ensemble de la chose? BTW, je vous conseille d'utiliser un CALayer si possible.
- C'est pour l'iPhone, je crois que c'est déjà CALayer soutenu.
- En effet, mais pourquoi tous les UIView/UIResponder bagages si vous n'avez pas besoin d'?
- eh bien, dans mon cas, ils ont besoin de points de vue doivent s'inscrire touche
- et seuls les bords sont irréguliers... image elle-même est anti-aliasing très bien.
- Découvrez Johan Kool réponse... très simple, et a travaillé comme un charme!
Vous devez vous connecter pour publier un commentaire.
N'oubliez pas de définir les anti-alias options:
Les bords de CoreAnimation couches ne sont pas lissé par défaut sur iOS. Cependant, il est une clé que vous pouvez définir dans l'Info.plist qui permet l'antialiasing des bords: UIViewEdgeAntialiasing.
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html
Si vous ne voulez pas la charge de l'activation de cette option, un travail est à ajouter un 1px bordure transparente sur le bord de l'image. Cela signifie que les "bords" de l'image ne sont plus sur le bord, donc n'ont pas besoin de traitement spécial!
UIAlertView
's coins.Nouvelle API – iOS 6/7
Travaille aussi pour iOS 6, comme indiqué par @Chris, mais n'a pas été rendu public jusqu'à iOS 7.
Depuis iOS 7, CALayer a une nouvelle propriété
allowsEdgeAntialiasing
qui fait exactement ce que vous voulez dans ce cas, sans encourir les frais généraux de l'activer pour toutes les vues de votre application! Ceci est une propriété de CALayer, afin de l'activer pour une UIView vous utilisezmyView.layer.allowsEdgeAntialiasing = YES
.juste ajouter 1px bordure transparente à votre image
juste ajouter "Rend avec bord anti-aliasing" OUI dans plist et il va fonctionner.
Je recommande totalement les suivants de la bibliothèque.
http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
Il contient beaucoup d'extensions utiles pour UIImage qui permettent de résoudre ce problème et également inclure le code pour générer des vignettes etc.
Profitez-en!
Le meilleur moyen que j'ai trouvé pour avoir des bords lisses et une forte image est pour ce faire:
L'ajout de l'Info.plist clés comme certaines personnes décrivent a un grand impact sur la performance et si vous l'utilisez alors que vous êtes essentiellement en l'appliquant à tout, au lieu de simplement le seul endroit où vous en avez besoin.
Aussi, ne pas simplement utiliser
UIGraphicsBeginImageContext(imageRect.size);
sinon, la couche sera floue. Vous devez utiliserUIGraphicsBeginImageContextWithOptions
comme je l'ai montré.J'ai trouvé cette solution de ici, et il est parfait:
utilisation: