Scroll d'une vue en déplaçant un objet de la vue

RocouRocou Membre
04:06 modifié dans API AppKit #1
Bonjour,

Je voudrais faire scroller le contenu d'une vue quand l'utilisateur déplace un objet de la vue et ceci uniquement lorsque le pointeur de la souris arrive en bordure de vue.

Mon code fonctionne très bien mais il souffre d'un défaut: j'ai tout bâti dans la méthode mouseDragged, aussi quand l'utilisateur arrête de faire son "drag", le scroll s'arrête.

Or je voudrais que le drag continue tant que le pointeur de la souris est en dehors de la vue ET tant que l'utilisateur maintient appuyé le bouton gauche de la souris

Réponses

  • CéroceCéroce Membre, Modérateur
    04:06 modifié #2
    Ceci ferait-il ton affaire ?

    - (void) mouseDragged:(NSEvent *)theEvent<br />{<br />	[self autoscroll:theEvent];<br />}
    
  • RocouRocou Membre
    04:06 modifié #3
    dans 1243957770:

    Ceci ferait-il ton affaire ?

    - (void) mouseDragged:(NSEvent *)theEvent<br />{<br />	[self autoscroll:theEvent];<br />}
    



    Non non, ça c'est ce que j'ai fait mais dès que l'utilisateur stoppe son mouvement avec la souris (et cela arrive forcément quand le pointeur atteint le bord de l'écran...), le scroll s'arrête
  • CéroceCéroce Membre, Modérateur
    04:06 modifié #4
    J'ai fait l'essai pour comprendre ton problème.

    En effet, la scrollview ne défile que lorsqu'on déplace la souris, et que le pointeur se trouve en dehors du cadre de la scrollview.
    Ce que tu veux, c'est qu'elle se mette à  défiler dès que le pointeur se trouve dans le bord de la scrollview.

    Je ne l'ai jamais fait, mais je suppose que dans mouseDragged: tu peux détecter si le pointeur se trouve sur un bord, et appeler -scrollPoint: pour faire défiler la vue. La conversion des coordonnées frame <-> bounds s'annonce complexe.
  • RocouRocou Membre
    04:06 modifié #5
    dans 1243961982:

    J'ai fait l'essai pour comprendre ton problème.

    En effet, la scrollview ne défile que lorsqu'on déplace la souris, et que le pointeur se trouve en dehors du cadre de la scrollview.
    Ce que tu veux, c'est qu'elle se mette à  défiler dès que le pointeur se trouve dans le bord de la scrollview.

    Je ne l'ai jamais fait, mais je suppose que dans mouseDragged: tu peux détecter si le pointeur se trouve sur un bord, et appeler -scrollPoint: pour faire défiler la vue. La conversion des coordonnées frame <-> bounds s'annonce complexe.

    Oui, c'est exactement cela. Merci beaucoup pour cette piste.
    Je pensais que l'on pouvait détecter si le bouton de la souris était en position appuyé ou non mais je n'ai pas trouvé.
  • CéroceCéroce Membre, Modérateur
    04:06 modifié #6
    Hum... effectivement, mouseDragged: n'est appelée que lorsque le pointeur est déplacé. Alors ce qu'il faudrait plutôt, ce serait:
    - dans mouseDragged: voir si tu es sur un bord
    - si oui, lancer un timer (avec une période de 250 ms) qui fait défiler la vue
    - dans mouseDragged: arrêter le timer si on n'est plus sur le bord.
    - Dans mouseUp: arrêter le timer.

    Honnêtement, tu as déjà  tellement de boulot avec le reste de ton appli, que je me contenterais du fonctionnement par défaut de -[autoscroll].
  • RocouRocou Membre
    04:06 modifié #7
    dans 1244013338:

    Honnêtement, tu as déjà  tellement de boulot avec le reste de ton appli, que je me contenterais du fonctionnement par défaut de -[autoscroll].

    :)
    Tu as bien raison. Néanmoins, par expérience, je sais que l'interface dans ce genre de logiciel est primordiale, les commandes étant prises par téléphone, il faut que l'interface soit très claire, intuitive, simple et que la "saisie" soit très rapide.
    Mais tu as certainement raison, je me perds dans des détails qui pourront être intégrés plus tard après la version 1.0
Connectez-vous ou Inscrivez-vous pour répondre.