2012-05-07 14 views
20

Come traduco metodo la seguente chiamata da ObjectiveC alla sintassi RubyMotion:Utilizzando @selector in RubyMotion

[self.faceView addGestureRecognizer:[ 
    [UIPinchGestureRecognizer alloc] initWithTarget:self.faceView 
    action:@selector(pinch:)]]; 

ho ottenuto fino a questo punto:

self.faceView.addGestureRecognizer(
    UIPinchGestureRecognizer.alloc.initWithTarget(
    self.faceView, action:???)) 

Capisco la @selector(pinch:) indica una delegazione alla oggetto ricevente il metodo pinch, ma come dovrei farlo in RubyMotion? Forse usando un blocco?

risposta

26

Dovreste essere in grado di utilizzare solo una stringa per specificare il selettore:

self.faceView.addGestureRecognizer(
    UIPinchGestureRecognizer.alloc.initWithTarget(
    self.faceView, action:'pinch')) 
+1

NO WAY! :) Grazie! – kolrie

+6

Il video introduttivo di Pragmatic Studios copre questo aspetto e mostra un paio di buoni esempi di migrazione del codice Obj-C in ruby: http://pragmaticstudio.com/screencasts/rubymotion –

+4

Immagino che la tua azione di pizzicamento sarà in realtà simile a questa: 'def pinch (recognizer)' che significa che il tuo selettore sarà effettivamente 'pizzico:' –

0
@gesture = UIPinchGestureRecognizer.alloc.initWithTarget(self.faceView,action:'pinch:') 

self.faceView.addGestureRecognizer(@gesture) 

def pinch(foo) 

end 

Se non si desidera che il gestore del metodo di prendere un argomento, usare action:'pinch' invece. Sarà quindi cercare un metodo come questo:

def pinch 

end 

Utilizzando un var di istanza (@gesture = ...) è una buona idea qui perché a volte riconoscitori gesto e il GC non giocano bene insieme se non si fanno il gesto var un'istanza var di un UIViewController. (Nella mia esperienza)