2009-11-03 4 views
3

J'ai une vue UIScroll qui remplit un écran de paysage, qui contient un petit arbre de UIViews à l'intérieur que je peux faire défiler horizontalement. Je voudrais appliquer une distorsion en barillet à la scrollview, afin que les sous-vues se déplacent de l'extérieur vers le centre de la scrollview, elles changent de forme.Appliquer la distorsion en barillet à UIView

Qu'est-ce qu'une bonne chose à faire pour appliquer des distorsions comme celle-ci?

Existe-t-il un moyen de surcharger drawRect pour la vue déroulante, de dessiner sur un bitmap, de le déformer, puis de dessiner cela dans le contexte de ScrollView à la place? Ou y a-t-il des API intégrées pour faire ce genre de distorsion?

barrel distortion http://www.arielnet.com/Main/images/fig1f.gif

Répondre

1

Vous pourriez se rapprocher de cet effet en transformant correctement les couches pour chacun de vos UIViews. À l'aide d'un CATransform3D, vous pouvez faire pivoter et traduire chacune des couches en 3-D, ainsi que apply a perspective effect. Pour votre cas, vous pouvez traduire chacune de vos couches UIView de sorte qu'elles soient comme un carrousel, avec la vue du milieu vers l'avant et droite sur l'écran, et les couches latérales inclinées et légèrement en retrait de l'écran. Cela ne provoquerait pas une courbure des calques eux-mêmes (ils seront toujours dessinés comme des rectangles), mais si vous appliquez une transformation sur le calque de la vue principale pour créer un effet de perspective, vous devriez être en mesure d'être très proche.

Pour un exemple de ce type de positionnement 3D de couches, je recommande this example où un labyrinthe 3D complet est construit à partir de CALayers.

En ce qui concerne la vue déroulante, vous devrez probablement effectuer une manipulation tactile personnalisée pour cela. Vous pourriez être en mesure de se débrouiller avec les méthodes UIScrollViewDelegate comme scrollViewDidScroll :, mais je n'ai pas essayé moi-même.

Questions connexes