2014-07-15 7 views
6

Ich versuche eine Alarmbox aufzurufen, wenn ich ein Bild für 2 Sekunden berühre und niederhalte. Hier ist, was ich bis jetzt bekam:Wie implementiert man ein Antippen und Halten auf einem 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]; 
} 

Nicht sicher, ob dies etwas bewirkt, aber die Bildansicht wird später programmgesteuert erstellt und nicht beim Laden. Vielen Dank im Voraus, wie jede Hilfe ist willkommen ..

Außerdem habe ich bei den folgenden Links angesehen:

Long press gesture on UICollectionViewCell

Long press gesture recognizer on UIButton?

Apple Link 1

Apple Link 2

+0

Wo fügen Sie Gesten zu imageView hinzu ?. Ich kann nur die Handler-Methode sehen –

+0

Mein Fehler ... In der ViewDidLoad. Vielen Dank. –

Antwort

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

Funktioniert immer noch nicht für mich ... Ist es wichtig, dass mein Bild 22x22 ist? –

+0

Ich glaube nicht. Prüfen Sie die Richtigkeit userInteractionEnabled sollte JA sein (true) Auf der Basis der Klassenreferenz: userInteractionEnabled Ein boolescher Wert, ob Ereignisse Benutzer bestimmt werden ignoriert und aus der Ereigniswarteschlange entfernt. @property (nicht atomisch, Getter = isUserInteractionEnabled) BOOL userInteractionEnabled Diskussion Diese Eigenschaft wird von der UIView-Elternklasse geerbt. Diese Klasse ändert den Standardwert dieser Eigenschaft in NO. – gabriel

+0

hat bei mir funktioniert, ohne die Zeile hinzuzufügen * lpHandler.delegate = self; * – LuAndre

2

UIImageViews haben standardmäßig userInteractionEnabled = NO. Wenn Sie Ihren Gestenerkenner einer Instanz von UIImageView hinzufügen, stellen Sie sicher, dass Sie ihn auf YES zurücksetzen: myImageView.userInteractionEnabled = YES