2013-03-19 2 views
0

Je suis cet excellent petit tutoriel sur le dessin à l'écran dans la couche d'un UIView (sous-classe). http://spritebandits.wordpress.com/ Cela fonctionne simplement.Dessin à l'écran avec le doigt dans UITableView

Il n'y a qu'une seule chose. J'ai placé cette vue en tant que sous-vue d'un UITableViewCell qui, naturellement, est affiché dans le cadre d'un UITableView. Je suppose que j'aurais le même problème quand je le placerais dans un UIScrollView. (UITableView hérite quand même de UIScrollView)

Les touches sont déclenchées par ma vue de peinture tant que leur mouvement est horizontal. Dès que je bouge le doigt un peu verticalement, même partiellement, l'UITableView prend le relais et fait défiler la table.

Y a-t-il un moyen approprié d'arrêter la Table pour prendre le contrôle des touches alors que le toucher est réellement dans ma vue?

Si c'est important: j'utilise un storyboard. La cellule est une cellule prototype avec sa propre sous-classe de UITableViewCell.

Répondre

0

Je n'ai pas de réponse pour ça. Mais il y a essentiellement un travail autour.

Vous pouvez obtenir l'utilisateur dans un mode de dessin, où le défilement d'un UITableViewCell est désactivé puis

une fois que l'utilisateur se fait avec le dessin, vous pouvez activer le défilement à nouveau.

L'insertion d'un bouton n'importe où sur l'écran vous aidera à changer de mode.

+0

Merci. Techniquement, cela pourrait fonctionner. Mais est-ce une bonne expérience utilisateur? En tous cas. Je pourrais essayer de désactiver le défilement pendant que l'utilisateur dessine quelque chose. Mais cela ne fonctionnera pas lorsque l'utilisateur commencera à dessiner dans une direction verticale. –

1

J'ai implémenté ceci en utilisant la même classe "Canvas" que vous dites et aussi dans un UITableViewCell. Mais je n'ai pas utilisé la cellule entière pour dessiner, seulement un UIView à l'intérieur de UITableView comme une sous-vue.

J'ai atteint l'expérience utilisateur complète en activant et en désactivant le défilement UITableView lorsque UIView (sous-vue de la cellule où j'autorise le dessin) déclenche touchesBegan ou toucheEnded. Alors quand ils touchent/bougent à l'intérieur de l'UIView, ils dessinent. Quand c'est à l'extérieur, ils défilent. Ils ne peuvent donc pas défiler sur UIView car ils dessinent.

Le problème dans votre cas est que puisque la cellule entière est la vue pour dessiner, l'utilisateur ne peut pas faire défiler dans cette cellule concrète parce que c'est le dessin.

Espérons que cela aidera.

+0

Ma sous-vue Canvas n'est qu'une partie de cette cellule. Il y a d'autres étiquettes et boutons dans la cellule. Il y aura beaucoup d'espace sur tous les côtés de la vue Canevas que l'utilisateur peut faire glisser pour faire défiler la table. Et j'ai essayé le même tour. J'ai tracé quand touchesBegan est viré. Il est déclenché uniquement lorsque l'utilisateur se déplace latéralement. Je ne remarquerai aucun mouvement avec des composants haut-bas. Avez-vous utilisé un truc pour contourner cela? –

+0

Uhm .. une chose, si vous appuyez sur le Canevas puis déplacez le doigt de haut en bas, il fait défiler ou dessiner? (essayez-le lentement, d'abord le robinet sur la toile, puis le glisser vers le haut ou vers le bas un peu) –

+0

Je viens de l'essayer. Dans touchesBegan, je monte d'abord la chaîne superview jusqu'à trouver un UITableView et définir scrollEnabled sur NO. La même chose en toucheEnded: avec OUI. Ainsi, lorsque l'utilisateur commence à dessiner verticalement, cela fonctionne très bien. L'utilisateur peut changer de direction et continue de dessiner.Et quand l'utilisateur commence à dessiner mais attend un moment après avoir touché avant de bouger le doigt, alors cela fonctionne bien aussi. Mais lorsque l'utilisateur commence horizontalement ou en diagonale ou alors alors la table défile. –

Questions connexes