Ich versuche jede Aktivität (d. H. Berührungen) abzufangen, die in meiner gesamten Anwendung passiert.UIView's -hitTest: withEvent: dreimal aufgerufen?
Mit anderen Worten, ich versuche, über jedes Berührungsereignis informiert zu werden, das in meiner UIView-Hauptansicht passiert und den Rest meiner Steuerelemente enthält. Um dies zu tun, dachte ich, die UIView-Methode -hitTest: withEvent: war eine gute Lösung.
Wenn ich diese überschreibende Methode jedoch vor dem Aufruf von [super hitTest: ... withEvent: ...] anmelde, sehe ich, dass es dreimal aufgerufen wird für jede Berührung, die ich mache, und ich sehe keinen Unterschied darin das Ereignis, das ich jedes Mal erhalte, wenn es angerufen wird.
Hier ist, wie wird das Verfahren in der Hauptansicht von meiner Anwendung implementiert:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
NSLog(@"hitTest:withEvent called :");
NSLog(@"Event: %@", event);
NSLog(@"Point: %@", NSStringFromCGPoint(point));
NSLog(@"Event Type: %d", event.type);
NSLog(@"Event SubType: %d", event.subtype);
NSLog(@"---");
return [super hitTest:point withEvent:event];
}
Und hier ist das, was ich NSLog für eine einzelne Note in dieser Ansicht:
2010-11-29 14:09:26.892 Application[68818:207] hitTest:withEvent called :
2010-11-29 14:09:26.892 Application[68818:207] Event: <UITouchesEvent: 0x5716d60> timestamp: 37935.2 touches: {(
)}
2010-11-29 14:09:26.892 Application[68818:207] Point: {173, 498}
2010-11-29 14:09:26.892 Application[68818:207] Event Type: 0
2010-11-29 14:09:26.892 Application[68818:207] Event SubType: 0
2010-11-29 14:09:26.893 Application[68818:207] ---
2010-11-29 14:09:26.893 Application[68818:207] hitTest:withEvent called :
2010-11-29 14:09:26.893 Application[68818:207] Event: <UITouchesEvent: 0x5716d60> timestamp: 37935.2 touches: {(
)}
2010-11-29 14:09:26.893 Application[68818:207] Point: {173, 498}
2010-11-29 14:09:26.893 Application[68818:207] Event Type: 0
2010-11-29 14:09:26.893 Application[68818:207] Event SubType: 0
2010-11-29 14:09:26.893 Application[68818:207] ---
2010-11-29 14:09:26.893 Application[68818:207] hitTest:withEvent called :
2010-11-29 14:09:26.894 Application[68818:207] Event: <UITouchesEvent: 0x5716d60> timestamp: 37944.9 touches: {(
)}
2010-11-29 14:09:26.894 Application[68818:207] Point: {173, 498}
2010-11-29 14:09:26.894 Application[68818:207] Event Type: 0
2010-11-29 14:09:26.894 Application[68818:207] Event SubType: 0
2010-11-29 14:09:26.894 Application[68818:207] ---
Wie könnte ich Machen Sie einen Unterschied zwischen diesen drei Benachrichtigungen, um die Aktion auszulösen, die ich nur einmal für eine einzelne Berührung ausführen möchte.
Vielen Dank im Voraus!
Haben Sie jemals eine saubere Lösung gefunden? Ich habe das gleiche Problem. Die Zeitauswertung scheint zu funktionieren, könnte aber in Zukunft leicht für SDK-Änderungen anfällig sein. –
Glück, warum das passiert? Ich versuche, das selbst herauszufinden – prostock
Irgendwelche Fortschritte zu diesem Thema? –