Appui long sur une UIView pour la déplacer sur l'IHM
Bonjour à tous,
Dans le but de déplacer une UIView sur mon IHM, j'ai choisi un appui long suivi d'un glissé. Seulement, pour éviter que ma vue en chevauche une autre, je souhaiterai déplacer celle qui se trouvera en dessous au bout de 2 secondes après que la première se soit retrouvé sous la seconde. Ce que je ne sais pas vraiment faire c'est de déclencher l'action après les deux secondes sachant que si l'utilisateur déplace de nouveau la fenêtre, le compteur doit repartir à 0 et le user doit attendre deux secondes supplémentaires.
Voici le code :
func longPressAction(gesture: UILongPressGestureRecognizer) {
if gesture.state == .began {
...
}
else if gesture.state == .changed {
// Attende de deux secondes et si l'utilisateur n'a pas bougé la view entre temps
// on lance l'action de réorganisation de l'IHM
}
else if gesture.state == .ended {
...
}
}
Pouvez vous me mettre sur la voie ?
Merci pour vos réponses. ^_^
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pourquoi ces deux secondes ?
DeÌjà ça va être coton pour que l'utilisateur ne bouge pas le doigt pendant 2 secondes (tu peux mettre une sorte de dead zone mais bon...) et ça va être une punition à utiliser ton affaire.
L'ideÌal serait de faire en sorte que le deÌplacement se fasse quand les 2 centres de vues se retrouvent à une certaine distance. C'est plus dynamique et ça eÌvite un lag qui va en énerver plus d'un.
Moi je ferai geÌrer ça par la superview.
Tu fais un protocol pour le geÌrer avec un manager que tu renseigne à la creÌation de tes vues filles. (comme un delegate en gros).
DeÌ€s que tu drag une vue tu en informe le manager et lui s'occupe des calculs et du deÌplacement des autres vues. Il faut pour ça que tu geÌ€re un peu plus finement ta view hierarchy donc ta superview doit aussi être custom.
Okay mais comment (techniquement) capter le fait que le déplacement se soit arrêté (alors que nous sommes toujours en appuis long dessus) ? Il existe un gesture recognizer qui détermine l'état d'un éventuel déplacement ?
Exemple, l'utilisation d'un UIPanGestureRecognizer acouplé à l'état "Ended" dans la méthode "translation" peut faire l'affaire ?
Tant que tu n'as pas leveÌ le doigt tu notifies le manager deÌ€s qu'il y a un mouvement. On peut approfondir ça un peu plus tard là je suis au boulot.
Ca marche ! Car la je suis un peu dans le flou... ::)
Je connais pas...
Mais je ne sais si mon explication du début est très clair pour vous. ???
Je veux créer (grosso modo) la même expérience utilisateur que lorsque nous déplaçons des icons sur l'écran d'accueil de l'iPhone ou iPad.
1 - Un appui long
2 - Je choisis une position
3 - Lorsque je m'arrête, je déplace les autres éléments
4 - Je lâche la view
Et si tu commençais d'abord par nous dire ce que tu voulais faire au final.
Il y a peut être deÌjaÌ€ un framework qui fait tout ça. Sinon on te filera un coup de main
Regarde dispatch_after !
Tu veux dire un appuui lonnnggggg ? J'ai toujours eu horreur du délai d'attente interminable défini par Apple pour activer le déplacement des icônes du bureau.
Je ne souhaite pas utiliser de framework. Pourquoi ? Je n'ai pas appris à faire des requête SQL en utilisant un requêteur automatique. ::)
Okay je recommence :
J'ai fait un schéma pour illustrer ma demande.
Ouiiiiiiiiiiiiiiiiii ! Même si mon problème ne vient pas de l'appuis long mais de déplacer les autres élément mais lorque j'ai déplacé ma vieux, que je me sois arrêter à un endroit et (à ce moment là ) les autres View se déplacent.
Ca constiste en quoi ?
Tu peux avoir le comportement que je souhaite avec un UICollectionView ?
Mais ke truc c'est que j'aurais aimer le faire à la main pour apprendre. ::)
Oui Jérémy ! Regarde ce lien, tu vas trouver ton bonheur.
http://nshint.io/blog/2015/07/16/uicollectionviews-now-have-easy-reordering/
Maintenant si tu souhaites créer ce composant à la main, les autres membres du forum seront plus calés que moi pour répondre à tes questions.
Merci ! ;D
De ce que je comprends, oui
Tu veux réinventer encore une roue ? Pourquoi? Apple l'a déjà fait pour toi ; en-profites
WWDC 2012 sessions 205 et 219
Pas moi. Tu as déjà trouvé ton bonheur. Vas-y
Comme je l'ai dit avant, ce n'est pas en utilisant quelque chose de tout fait qu'on apprend. Qui a appris à cuisiner en achetant des plat tout fait chez un traiteur... ::)
Quelqu'un a t'il une réponse qui pourrait m'aiguiller ?
Les anglais ont un proverbe : "Why have a dog and bark youself?" (Porquoi être propriétaire d'un chien et se mettre à aboyer soi-même ?)
Tu as payé Apple pour ton ordi, tes iBidules et ton inscription développeur, pourquoi refaire UIKit toi-même ?
Tu profiterais plus d'apprendre comment créer les agencements pour UICollectionViewController ; tu y trouveras pas mal de travail.
Joanna a pleinement raison pour le coup !
C'est bien de vouloir apprendre de le sorte, on l'a tous fait, mais reÌinventer la roue n'est pas vraiment intéressant. Déjà tu vas faire un framework qui fonctionnera d'office moins bien que les composants d'UIKit. De plus –et c'est ça qui est important– ça n'est pas inteÌressant de savoir faire ça dans son ensemble.
Je comprends que tu veuille apprendre à geÌrer les gestures, les deÌplacements de vue, la gestion et le layout de ces meÌ‚mes vues. Le problème avec ta deÌmarche c'est que tu t'attaque à un très gros morceau. GeÌrer ce genre de chose fait appel un tas de composants et un diagramme des classes assez touffu dont tu n'as meÌ‚me pas ideÌe. Je ne suis pas en train de dire que tu n'en n'es pas capable (j'en sais rien en fait) mais je pense qu'il y a des motifs plus sympas et plus didactiques pour apprendre et gagner de l'expeÌrience en dev iOS.
Continue ton application, maiÌ‚trise déjà UICollectionView qui offre une API assez riche et tu vas trouver plein de choses plus marrantes à faire par la suite.
Maintenant si ce que je dis ne te plaiÌ‚t pas –et tu as parfaitement le droit– je te conseillerai d'aller fouiller GitHub pour trouver des frameworks utiliseÌs avant l'ère UICollectionView. Analyse le code et comprends le tu devrais déjaÌ€ en apprendre beaucoup meÌ‚me si analyser ce genre de code est plutoÌ‚t long et clairement chiant...
Le truc c'est que je ne suis pas en train de faire une application qui va utiliser ça. Non je ne compte pas créer de framework avec mes propres composants. Le but est de faire un exercice pour apprendre à implémenter ce que je vous ai décrit. Ca ne va pas plus loin... Si effectivement je devais créer une app avec cette expérience utilisateur, il est évident que j'utiliserai l'UICollectionView.
Absolument pas, je comprends parfaitement ton point de vue.
Ca marche, je vais regarder. Merci colas.
D'acc !