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
4 Réponses :
Votre vue accepte les premiers intervenants?
Je suppose que vous vouliez dire - (bool) acceptefiresponder code>; 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: code> rappel.
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? P>
Ç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).
Recevoir Swipewithevent: strong> 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: p>
glissez entre les pages: p>
p>
glisser entre les applications en plein écran: p>
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 Ensemble, ces deux paramètres de préférence provoquent Swipewithevent: strong> Messages à envoyer au premier répondeur. P>
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". P>
voir http://developer.apple.com/library/mac/#releAseNotes/ Cacao / appkit.html p>
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.
Essayez avec [auto SettacceptouToutsToutsToutsToutsTouts: Oui]; code> où il est indiqué
// code d'initialisation ici. code> p> p>
Je crois que vous vouliez dire [auto Setacceptouchevents: Oui];
Ou simplement remplacer l'acceptation d'accepterSouchevents pour revenir oui à votre vue.
À titre de note latérale, il est possible d'obtenir des gestes de défilement de
- [Wheel de défilement NSresponder:] code>, mais cela je voulais utiliser spécifiquement des gestes à trois doigts.