2011-02-08 13 views
8

So come implementare touchesBegan per UIImageViewImplementare UITouchDown per UIImageView

è possibile implementare UITouchDown per UIImageView? (Lo so che posso usare touchesBegan invece di UITouchDown ma voglio implementare UITouchDown)

+0

Per TouchDown, si intende 'UIControlEventTouchDown'? – Anurag

+0

sì intendo UIControlEventTouchDown –

risposta

13

Utilizzare un UIButton.

UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[aButton setImage:someUIImage forState:UIControlStateNormal]; 
[aButton addTarget:self action:@selector(aMethod) forControlEvents:UIControlEventTouchUpInside]; 

[self.view addSubview:aButton]; 

Alternativa a UIButton (metodo più)

Un UIControl implementa le interazioni degli utenti e il supporto per i già a grana fine interazioni con l'utente. È possibile combinare le funzionalità di une un UIControl per ottenere questo poiché entrambe sono sottoclassi di UIView.

Per ottenere questo comportamento, aggiungere un oggetto di UIImageView come sottoview a UIControl in modo che l'immagine sia completamente coperta. Quindi aggiungi un gestore di eventi a questo controllo usando addTarget:action:forControlEvents:. Ecco un esempio:

// assuming the image view object exists 
UIImageView *anImageView = ..; 

// create a mask that the covers the image exactly 
UIControl *mask = [[UIControl alloc] initWithFrame:anImageView.frame]; 

// add the image as a subview of this mask 
CGSize imageSize = anImageView.frame.size; 
anImageView.frame = CGRectMake(0, 0, imageSize.width, imageSize.height); 
[mask addSubview:anImageView]; 

// add a target-action for the desired control events to this mask 
[mask addTarget:self action:@selector(someMethod:) forControlEvents:UIControlEventTouchUpInside]; 

// add the mask as a subview instead of the image 
[self.view addSubview:mask]; 
+0

Grazie, io uso il metodo più lungo –

+0

Usa GestureRecognizer: http://stackoverflow.com/a/3907961/860488 –

1

Non puoi

eventi di controllo, come UIControlEventTouchDown ecc sono disponibili per UIControl's oggetti figlio come UIButton, UITextField ecc UIImageView è un UIView e quindi non può generare le notifiche di controllo.

È necessario utilizzare touchesBegan e co.

2

È possibile utilizzare UITapGestureRecognizer, invece di creare personalizzati UIButton.

0

gli eventi di controllo come UIControlEventTouchDown ecc sono disponibili per gli oggetti figlio di UIControl come UIButton, UITextField ecc. UIImageView è un UIView e quindi non può generare notifiche di controllo.