/ / Utilisation de CATransform3D - objectif-c, uitableview, catransform3d, catransform3drotate

Utilisation de CATransform3D - objectif-c, uitableview, catransform3d, catransform3drotate

J'essaie de faire une rotation sur une table pour incliner la table (pour donner l’effet d’une analyse de texte en 3D semblable à celle de la guerre des étoiles).

Après avoir regardé autour de moi, j'ai trouvé cette question objectif-с CALayer UIView rotation réelle

et la réponse acceptée semble faire ce que je veux. Cependant, lorsque j'applique le code à ma TableView, cela ne fait rien et la table apparaît comme d'habitude.

Voici le code que je copie:

float distance = 50;

CATransform3D basicTrans = CATransform3DIdentity;
basicTrans.m34 = 1.0 / -distance;
_tableView.layer.transform = CATransform3DRotate(basicTrans, M_PI_4, 1.0f, 0.0f, 0.0f);

Je mets ceci dans ma méthode viewDidLoad après avoir créé mon tableau de chaînes (qui remplit la tableView)

Je n'ai actuellement que trois autres méthodes dans le contrôleur:

didReceiveMemoryWarning (ajouté automatiquement lors de la création du projet)

tableView: numberOfRowsInSelection (utilisé pour configurer la vue table) tableView: cellForRowAtIndexPath (utilisé pour configurer la vue tableau et définir le texte des cellules à partir du tableau)

Je crois comprendre que la tableview a unCALayer, et que CATransform3D le manipule pour donner la représentation de la vue dans un espace 3D. Si ma compréhension est correcte, je ne comprends pas pourquoi la liste s’affiche normalement à l’écran. J’apprécie les chiffres qui ne me donnent pas l’effet souhaité mais ils doivent au moins affecter l’apparence de la tableView à l’écran.

J'ai également importé QuartzCore, etc., et l'ajouté dans des cadres liés.


La solution consiste à utiliser le code marqué comme réponse OLD dans la méthode - (UITableViewCell *) tableView: cellForRowAtIndexPath: après la vérification de la valeur de la cellule.

Réponses:

0 pour la réponse № 1

L’approche suggérée ci-dessous n’ayant pas fonctionné, j’essayerais également d’appliquer la transformation au UITableView"s subviews. En fait, UITableView est un UIScrollView, c’est donc juste un conteneur pour les sous-vues qui composent le contenu réel de la vue table. Je voudrais essayer quelque chose comme ça:

for (UIView* subview in tableView.subviews) {
subview.layer.transform = ...;
}

Je n'ai jamais inspecté de vues de tablehiérarchie, donc je ne peux pas dire si cela fonctionnera ou si vous devriez plutôt appliquer la transformation à une seule des sous-vues, mais j'espère que cela peut vous conduire dans la bonne direction.

ANCIENNE REPONSE:

Vous pouvez essayer de définir le calque de la vue de votre table sublayerTransform au lieu de `transformer":

Vous utilisez généralement cette propriété pour ajouterperspective et autres effets de visualisation sur les calques incorporés. Vous ajoutez une perspective en définissant la transformation de sous-couche sur la matrice de projection souhaitée. La valeur par défaut de cette propriété est la transformation d'identité.

(la source).

Je suggère cela en partant de l'hypothèse qu'un UITableView a une structure assez complexe en termes de sous-vues, la transformation de la couche de la vue peut donc ne pas avoir d’effet. Je n’ai pas essayé, cependant, donc je ne peux pas garantir que cela fonctionnera.