7
votes

- [NSPEPonder Swipewithevent:] Non appelé

J'écris une application ciblant OS X Lion et Snow Leopard. J'ai une opinion que je veux avoir répondu aux événements de balayage. Je crois comprendre que les balayages à trois doigts appelleront - [nsreponder Swipewithevent:] code> si cette méthode est mise en œuvre dans ma vue personnalisée. J'ai déjà regardé Cette question et réponses correspondantes, et a essayé les suivants modifiés Mise en œuvre du talon du code de Oscar del Ben:

@implementation TestView

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
    [[NSColor redColor] set];
    NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver);
}

- (void)swipeWithEvent:(NSEvent *)event {
    NSLog(@"Swipe event detected!");
}

- (void)beginGestureWithEvent:(NSEvent *)event {
    NSLog(@"Gesture detected!");
}

- (void)endGestureWithEvent:(NSEvent *)event {
    NSLog(@"Gesture end detected!");
}

- (void)mouseDown:(NSEvent *)theEvent {
    NSLog(@"mouseDown event detected!");
}

@end


1 commentaires

À titre de note latérale, il est possible d'obtenir des gestes de défilement de - [Wheel de défilement NSresponder:] , mais cela je voulais utiliser spécifiquement des gestes à trois doigts.


4 Réponses :


0
votes

Votre vue accepte les premiers intervenants? XXX


3 commentaires

Je suppose que vous vouliez dire - (bool) acceptefiresponder ; Je ne l'avais pas, mais je viens de l'essayer avec ça et ça n'a pas fonctionné.


Oui, j'ai édité la réponse. Êtes-vous sûr que vous faites glisser vos doigts au-dessus de votre vue?


Oui; J'ai mis en œuvre d'autres fonctionnalités qui répondent au geste de défilement et fonctionnent comme prévu, de même que le MouseUp: rappel.



1
votes

Je ne sais pas si c'est le problème, mais seule la fenêtre de clé reçoit des gestes. Est votre clé de fenêtre?


3 commentaires

Ça devrait être; C'est la seule fenêtre de l'application et il reçoit des événements de défilement. Y a-t-il quelque chose qui pourrait ne pas que cela ne soit pas clé autre que moi ne la définissant pas activement pour être la clé?


Les fenêtres non clés reçoivent toujours des événements de roue de défilement (c'est pourquoi vous pouvez faire glisser deux doigts sur des fenêtres d'arrière-plan.)


J'ai vérifié; C'est la clé. Je verrai si je peux créer un projet minuscule pour reproduire le comportement (cela se produit actuellement dans une application modérément de taille).



12
votes

Recevoir Swipewithevent: Messages, vous devez vous assurer que le geste de glycine à 3 doigts n'est pas mappé sur tout ce qui pourrait entraîner un conflit. Aller aux préférences du système -> TrackPad -> Plus de gestes et définissez ces préférences à l'une des opérations suivantes:

  • glissez entre les pages:

    1. Swipe avec deux ou trois doigts, ou
    2. Swipe avec trois doigts

      • glisser entre les applications en plein écran:

        1. Glissez à gauche ou à droite avec quatre doigts

          Plus précisément, le balayage entre les applications en plein écran ne doit pas être défini sur trois doigts, sinon vous n'obtiendrez pas Swipewithevent: Messages.

          Ensemble, ces deux paramètres de préférence provoquent Swipewithevent: Messages à envoyer au premier répondeur.

          Bien sûr, vous devez toujours mettre en œuvre la logique de balayage réelle. Et si vous souhaitez effectuer un glissement de défilement fluide à la iOS, vous devrez alors faire un peu plus de travail. Il y a un exemple de comment faire cela dans le kit d'application LION relâche des notes de version sous la section "Suivi des glissières fluides".

          voir http://developer.apple.com/library/mac/#releAseNotes/ Cacao / appkit.html


1 commentaires

Désolé d'avoir pris longtemps à répondre; J'ai supposé que je m'envoie des courriels quand quelqu'un a répondu. J'utilise mieuxtouchtool, il est donc très possible que ce soit la raison pour laquelle les choses n'ont pas fonctionné comme je l'aurais aimé. Je vais y jeter un coup d'oeil; Pendant ce temps, je pense que cette réponse donne les informations nécessaires, donc je le marquais comme correct.



2
votes

Essayez avec [auto SettacceptouToutsToutsToutsToutsTouts: Oui]; où il est indiqué // code d'initialisation ici.


2 commentaires

Je crois que vous vouliez dire [auto Setacceptouchevents: Oui];


Ou simplement remplacer l'acceptation d'accepterSouchevents pour revenir oui à votre vue.