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 № 1L’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.