2014-07-15 8 views
6

J'essaie d'appeler une boîte d'alerte lorsque je touche une image pendant 2 secondes. Voici ce que je suis arrivé à ce jour:Comment mettre en place un tap et maintenir un UIImageView?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UILongPressGestureRecognizer *tapAndHoldGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapAndHoldGesture:)]; 
    tapAndHoldGesture.minimumPressDuration = 0.1; 
    tapAndHoldGesture.allowableMovement = 600; 
    [self.view addGestureRecognizer:tapAndHoldGesture]; 
} 

- (void) handleTapAndHoldGesture:(UILongPressGestureRecognizer *)gestureRecognizer{ 
    if (gestureRecognizer.state != UIGestureRecognizerStateEnded) { 
     return; 
    } 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Gesture:" message:@"hold it" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
} 

Je ne sais pas si cela affecte quoi que ce soit, mais la vue de l'image est créé par programme plus tard et non de la charge. Nous vous remercions à l'avance que toute aide est appréciée ..

Aussi, je l'ai regardé les liens suivants:

Long press gesture on UICollectionViewCell

Long press gesture recognizer on UIButton?

Apple Link 1

Apple Link 2

+0

Où vous ajoutez un geste à imageView ?. Je ne peux voir que la méthode du gestionnaire –

+0

Mon erreur ... Dans viewDidLoad. Merci. –

Répondre

6
-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self setupGesture]; 
} 

-(void) setupGesture 
{ 
    UILongPressGestureRecognizer *lpHandler = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleHoldGesture:)]; 
    lpHandler.minimumPressDuration = 1; //seconds 
    lpHandler.delegate = self; 
    //myUIImageViewInstance - replace for your instance/variable name 
    [**myUIImageViewInstance** addGestureRecognizer:lpHandler]; 
} 

- (void) handleHoldGesture:(UILongPressGestureRecognizer *)gesture 
{ 
    if(UIGestureRecognizerStateBegan == gesture.state) 
    { 
     // Called on start of gesture, do work here 
    } 

    if(UIGestureRecognizerStateChanged == gesture.state) 
    { 
     // Do repeated work here (repeats continuously) while finger is down 
    } 

    if(UIGestureRecognizerStateEnded == gesture.state) 
    { 
     // Do end work here when finger is lifted 
    } 

} 
+0

Ça ne marche toujours pas pour moi ... Est-ce important que mon image soit 22x22? –

+0

Je ne pense pas. Vérifiez la propriété userInteractionEnabled, doit être YES (true) Basé sur la classe Référence: userInteractionEnabled Valeur booléenne qui détermine si les événements utilisateur sont ignorés et supprimés de la file d'attente des événements. @property (nonatomic, getter = isUserInteractionEnabled) BOOL userInteractionEnabled Discussion Cette propriété est héritée de la classe parente UIView. Cette classe remplace la valeur par défaut de cette propriété par NO. – gabriel

+0

travaillé pour moi sans ajouter la ligne * lpHandler.delegate = self; * – LuAndre

2

UIImageViews par défaut ont userInteractionEnabled = NO. Si vous ajoutez votre reconnaissance de mouvement à une instance de UIImageView, assurez-vous de la remettre à YES: myImageView.userInteractionEnabled = YES

Questions connexes