2010-05-31 5 views
0

utilisateur Dans mon application iPhone, je voudrais à l'utilisateur de pouvoir « connecter » deux de mes vues par:ligne de bande de caoutchouc Dessin au cours de glisser

1) à partir d'un glisser dans la vue A 2) ils glisser vers la vue B, une ligne droite avec une extrémité dans la vue A et l'autre extrémité sous le point de traînée actuel, anime de manière élastique 3) quand/si elles sont libérées dans la vue B, la ligne est alors montrée entre les deux vues

J'ai vu des exemples de glisser-déposer des vues, et d'autres exemples d'animations, mais je n'en ai vu aucun qui soit un exemple simple de ce genre d'animation dirigée par l'utilisateur. Tout pointeur vers des exemples ou les documents spécifiques que je devrais regarder serait apprécié.

Si cela s'avère trivial - mes excuses. Bien que j'ai fait pas mal de développement, je ne fais que commencer dans l'iPhone SDK et Core Graphics.

Répondre

1

Il s'avère que c'est assez facile - ne pensez pas à la ligne comme appartenant à l'une ou l'autre vue, créez une troisième vue qui est transparente et non opaque, placez-le au-dessus des deux autres vues. Il pourrait être en plein écran ou vous pouvez calculer la taille et la position qui couvre juste vos points de vue. Détectez les taps dans cette troisième vue et utilisez l'animation principale pour afficher une ligne depuis le point où vous avez commencé à dessiner jusqu'au point où la ligne se termine. Lorsque la ligne se termine, vous pouvez détecter si l'entrée était valide et placer les points de début/fin dans les vues appropriées. Les fonctions que vous trouverez particulièrement utiles dans ce processus sont UIView convertPoint:toView: et beginAnimations:context:. Cela facilitera sans doute les choses si vous laissez le dessin au trait dans une vue dédiée et si vous ajoutez des lignes à celles-ci, plutôt que d'essayer d'enregistrer les lignes dans les vues non liées avec lesquelles vous vous connectez les lignes - probablement vous voulez un tableau ou similaire contenant CGFloats afin que vous puissiez recréer la vue de ligne si nécessaire en utilisant drawRect:.