2012-05-07 20 views
20

Jak mogę przetłumaczyć następujące metody połączenia z ObjectiveC składni RubyMotion:Korzystanie @selector w RubyMotion

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

mam tak daleko:

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

rozumiem @selector(pinch:) wskazuje delegacji do metoda obiektu odbiornika pinch, ale jak mógłbym to zrobić w RubyMotion? Może za pomocą bloku?

Odpowiedz

26

powinien być w stanie po prostu użyć ciąg określić selektor:

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

NIE SPOSÓB! :) Dziękuję Ci! – kolrie

+6

Wstępne wideo w Pragmatic Studios obejmuje to i pokazuje kilka dobrych przykładów migracji kodu Obj-C do ruby: http://pragmaticstudio.com/screencasts/rubymotion –

+4

Zgaduję, że twoje szczypta będzie wyglądało tak: "def szczypta (rozpoznaje)", co oznacza, że ​​twój selektor będzie faktycznie "szczypta": –

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

self.faceView.addGestureRecognizer(@gesture) 

def pinch(foo) 

end 

Jeśli nie chcesz obsługi metoda podjąć argument, zamiast używać action:'pinch'. Będzie on następnie szukać sposobu jak ten:

def pinch 

end 

Korzystanie ze var Instancji (@gesture = ...) jest dobrym pomysłem tutaj, ponieważ czasami aparatów rozpoznawania gestów i GC nie grają dobrze razem, jeśli nie robią gest var instancja var kontrolera UIViewController. (Z mojego doświadczenia)