Existe-t-il un moyen d'obtenir les objets UITouch
associés à un geste? UIGestureRecognizer
ne semble pas avoir de méthodes pour cela.Obtention des objets UITouch pour un UIGestureRecognizer
Répondre
Jay a raison ... vous aurez besoin d'une sous-classe. Essayez celui-ci pour la taille, c'est d'un de mes projets. En DragGestureRecognizer.h:
@interface DragGestureRecognizer : UILongPressGestureRecognizer {
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
@end
@protocol DragGestureRecognizerDelegate <UIGestureRecognizerDelegate>
- (void) gestureRecognizer:(UIGestureRecognizer *)gr movedWithTouches:(NSSet*)touches andEvent:(UIEvent *)event;
@end
Et DragGestureRecognizer.m:
#import "DragGestureRecognizer.h"
@implementation DragGestureRecognizer
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
if ([self.delegate respondsToSelector:@selector(gestureRecognizer:movedWithTouches:andEvent:)]) {
[(id)self.delegate gestureRecognizer:self movedWithTouches:touches andEvent:event];
}
}
@end
Bien sûr, vous aurez besoin de mettre en œuvre le
- (void) gestureRecognizer:(UIGestureRecognizer *)gr movedWithTouches:(NSSet*)touches andEvent:(UIEvent *)event;
méthode
dans votre délégué - par exemple :
DragGestureRecognizer * gr = [[DragGestureRecognizer alloc] initWithTarget:self action:@selector(pressed:)];
gr.minimumPressDuration = 0.15;
gr.delegate = self;
[self.view addGestureRecognizer:gr];
[gr release];
- (void) gestureRecognizer:(UIGestureRecognizer *)gr movedWithTouches:(NSSet*)touches andEvent:(UIEvent *)event{
UITouch * touch = [touches anyObject];
self.mTouchPoint = [touch locationInView:self.view];
self.mFingerCount = [touches count];
}
Si vous écrivez votre propre UIGestureRecognizer vous pouvez obtenir les objets tactiles remplaçant:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
ou l'équivalent déplacé, terminé ou annulé
Le Apple docs a beaucoup d'informations sur le sous-classement
Si vous avez seulement besoin de connaître l'emplacement du geste, vous pouvez appeler soit locationInView: soit locationOfTouch: inView: sur l'objet UIGestureRecognizer. Cependant, si vous voulez faire autre chose, vous devrez sous-classer.
Si ce n'est que l'endroit qui vous intéresse, vous n'avez pas à sous-classer, vous serez informé des changements d'emplacement du robinet à partir du UIGestureRecognizer.
INITIALISER cible:
self.longPressGestureRecognizer = [[[UILongPressGestureRecognizer alloc] initWithTarget: self action: @selector(handleGesture:)] autorelease];
[self.tableView addGestureRecognizer: longPressGestureRecognizer];
Poignée UIGestureRecognizerStateChanged pour obtenir des changements d'emplacement:
- (void)handleGesture: (UIGestureRecognizer *)theGestureRecognizer {
switch (theGestureRecognizer.state) {
case UIGestureRecognizerStateBegan:
case UIGestureRecognizerStateChanged:
{
CGPoint location = [theGestureRecognizer locationInView: self.tableView];
[self infoForLocation: location];
break;
}
case UIGestureRecognizerStateEnded:
{
NSLog(@"Ended");
break;
}
default:
break;
}
}
Ce n » t obtenir 'UITouch', il obtient seulement un' CGPoint' pour le cadre local de la vue spécifique. – Chris
Voici une méthode pour obtenir un appui long ajouté à un UIView arbitraire. Ceci vous permet d'exécuter une pression longue sur n'importe quel nombre d'UIViews. Dans cet exemple, je limite l'accès à la méthode UIView par le biais de balises, mais vous pouvez également utiliser isKindOfClass.
(D'après ce que je l'ai trouvé, vous devez utiliser touchesMoved pour LongPress parce que les feux touchesBegan avant la LongPress devient actif)
sous-classe - .h
#import <UIKit/UIKit.h>
#import <UIKit/UIGestureRecognizerSubclass.h>
@interface MyLongPressGestureRecognizer : UILongPressGestureRecognizer
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
@property (nonatomic) CGPoint touchPoint;
@property (strong, nonatomic) UIView* touchView;
@end
sous-classe - .m
#import "MyLongPress.h"
@implementation MyLongPressGestureRecognizer
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
{
UITouch * touch = [touches anyObject];
self.touchPoint = [touch locationInView:self.view];
self.touchView = [self.view hitTest:[touch locationInView:self.view] withEvent:event];
}
#pragma mark - Setters
-(void) setTouchPoint:(CGPoint)touchPoint
{
_touchPoint =touchPoint;
}
-(void) setTouchView:(UIView*)touchView
{
_touchView=touchView;
}
@end
viewcontroller - .h
//nothing special here
viewcontroller -.m
#import "ViewController.h"
//LOAD
#import "MyLongPress.h"
@interface ViewController()
//lOAD
@property (strong, nonatomic) MyLongPressGestureRecognizer* longPressGesture;
@end
@implementation PDViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//LOAD
self.longPressGesture =[[MyLongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressHandler:)];
self.longPressGesture.minimumPressDuration = 1.2;
[[self view] addGestureRecognizer:self.longPressGesture];
}
//LOAD
-(void) setLongPressGesture:(MyLongPressGestureRecognizer *)longPressGesture {
_longPressGesture = longPressGesture;
}
- (void)longPressHandler:(MyLongPressGestureRecognizer *)recognizer {
if (self.longPressGesture.touchView.tag >= 100) /* arbitrary method for limiting tap */
{
//code goes here
}
}
Simple et rapide:
NSArray *touches = [recognizer valueForKey:@"touches"];
Où est votre reconnaisseur UIGestureRecognizer
iOS 8 [
- 1. Quelle est la différence entre UITouch et UIGestureRecognizer?
- 2. Objets déportés recevant le message UIGestureRecognizer
- 3. Réflexion - obtention des propriétés des objets imbriqués
- 4. Utilisation d'un UIGestureRecognizer dans un UIWebView
- 5. UIGestureRecognizer sur MPMoviePlayerViewController
- 6. UIGestureRecognizer tirant deux fois?
- 7. Détecter un objet spécifique avec UITouch
- 8. objet UITouch se comporter bizarrement
- 9. Objets d'extension Xslt - Obtention de contexte
- 10. UITouch - événement ne répond pas
- 11. Faire pivoter UIView en utilisant UITouch
- 12. Conflits bettwen UIGestureRecognizer et dans l'iPhone
- 13. UIGestureRecognizer dans UITableView - Crash après défilement?
- 14. Conception pour convertir des objets
- 15. Comment savoir quand un geste de pincement est terminé (UIGestureRecognizer)
- 16. Fonction pour créer des objets?
- 17. Comment gérer exactement UITouch de l'image?
- 18. Motif pour empêcher un projet d'utiliser des objets fictifs et des objets réels
- 19. Modificateurs d'accès - Propriété sur les objets métier - obtention et définition
- 20. Déplacer UIImageView le long de l'axe des x en utilisant un UIGestureRecognizer
- 21. Requête pour récupérer des objets entourant un objet
- 22. Algorithmes pour positionner des objets dans un canevas
- 23. Dictionnaire Python pour stocker des objets socket
- 24. Algorithmes pour l'espacement visuel des objets
- 25. Ajouter des objets plus que pour ArrayList
- 26. Obtention des objets hérités lorsqu'ils ne sont pas attribués en tant qu'exportations dans MEF
- 27. Utiliser l'usine pour obtenir des objets Injecté
- 28. Obtention d'une exception nullpointer lors de la commutation des objets affichables dans J2ME
- 29. Attribuer des objets NULL pour renvoyer IQueryable
- 30. Structure JSON pour la liste des objets
Ne pas oublier d'ajouter #import pour déposer DragGestureRecognizer.h –
HotJard