2012-05-07 15 views
20

Wie kann ich die folgenden Methodenaufruf von Objective zu RubyMotion Syntax übersetzen:Mit @selector in RubyMotion

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

Ich habe bis hierher:

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

ich die @selector(pinch:) eine Delegation anzeigt, die verstehen Empfängerobjekt pinch Methode, aber wie würde ich das in RubyMotion tun? Vielleicht mit einem Block?

Antwort

26

sollten Sie in der Lage sein, nur einen String zu verwenden, um die Wähler zu spezifizieren:

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

KEIN WEG! :) Vielen Dank! – kolrie

+6

Das Einführungsvideo in Pragmatic Studios deckt dies ab und zeigt ein paar gute Beispiele für die Migration von Obj-C-Code zu Ruby: http://pragmaticstudio.com/screencasts/rubymotion –

+4

Ich nehme an, Ihre Pinch-Aktion wird tatsächlich so aussehen: 'def pinch (recognizer)' was bedeutet, dass Ihr Selektor tatsächlich 'pinch:' ist. –

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

self.faceView.addGestureRecognizer(@gesture) 

def pinch(foo) 

end 

Wenn Sie ein Argument nehmen Sie nicht die Methode Handler wollen, action:'pinch' stattdessen verwenden. Es wird dann für ein Verfahren wie folgt aussehen:

def pinch 

end 

eine Instanz var (@gesture = ...) ist eine gute Idee, hier, weil manchmal Geste Erkenner und die GC nicht gut zusammen spielen, wenn Sie nicht die Geste machen var eine Instanz var eines UIViewControllers. (In meiner Erfahrung)