L'anticrénelage bords de UIView après transformation à l'aide d'CALayer de transformation du
J'ai un UIView
objet qui tourne à l'aide de CALayer
's transform:
//Create uiview object.
UIImageView *block = [[UIImageView alloc] initWithFrame....]
//Apply rotation.
CATransform3D basicTrans = CATransform3DIdentity;
basicTrans.m34 = 1.0/-distance;
blockImage.layer.transform = CATransform3DRotate(basicTrans, rangle, 1.0f, 0.0f, 0.0f);
Après la rotation de la bords de l'objet ne sont pas d'anticrénelage. J'ai besoin de lisser eux.
Aidez-moi, s'il vous plaît. Comment peut-il être fait?
Vous devez vous connecter pour publier un commentaire.
Une façon de le faire est de placer l'image à l'intérieur d'un autre point de vue que de 5 pixels plus gros. Le plus gros de vue doit être transparent pixellisé frontière qui permettra de lisser les bords de la UIImageView:
Ensuite, placez votre UIImageView à l'intérieur de ce parent de la vue et du centre (Avec 2,5 pixels autour de chaque bord).
Enfin, faire tourner la vue parent au lieu de l'affichage de l'image.
Il fonctionne très bien - vous pouvez également encapsuler le tout dans la classe qui crée la hiérarchie.
view.layer.rasterizationScale = [[UIScreen mainScreen] scale];
pour éviter floue sur la Rétine des écrans.Il suffit d'ajouter cette paire clé-valeur à votre Info.plist:
UIViewEdgeAntialiasing
ensemble deYES
.vérifier
allowsEdgeAntialiasing
propriété deCALayer
.J'ai eu un problème similaire lors de la rotation autour de l'axe z. Réglage shouldRasterize = OUI empêché les bords irréguliers cependant, il est venu à un coût de performance. Dans mon cas, j'ai été à nouveau en utilisant le point de vue (et de ses couches), et en gardant le shouldRasterize = OUI a ralentir les choses.
La solution a été, pour désactiver le tramage à droite après je n'ai pas besoin de plus. Toutefois, depuis l'animation s'exécute sur un autre thread, il n'y a aucun moyen de savoir lorsque l'animation est terminée...jusqu'à ce que j'ai trouvé extrêmement utile CATransaction méthode. C'est un code que j'ai utilisé et il doit illustrer son utilisation:
a fonctionné comme un charme pour moi.
Je n'ai pas essayé d'utiliser ce avec les animations (c'est à dire des animations qui se produisent en raison de changement de valeur dans animables propriété pour un non de la vue associée couche), mais je m'attends à travailler aussi longtemps que le CATransaction méthode est appelée avant que le changement de propriété, tout comme une garantie que le bloc est donné à CATransaction avant une animation démarre.