2012-05-07 25 views
20

Làm thế nào để dịch các cuộc gọi phương pháp sau đây từ ObjectiveC cú pháp RubyMotion:Sử dụng @selector trong RubyMotion

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

tôi nhận này cho đến nay:

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

Tôi hiểu @selector(pinch:) chỉ ra một phái đoàn đến phương thức thu đối tượng pinch, nhưng làm cách nào để thực hiện điều này trong RubyMotion? Có thể sử dụng một khối?

Trả lời

26

Bạn sẽ có thể chỉ cần sử dụng một chuỗi để xác định selector:

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

KHÔNG PHẢI! :) Cảm ơn bạn! – kolrie

+6

Video giới thiệu tại Pragmatic Studios bao gồm điều này và cho thấy một vài ví dụ điển hình về việc chuyển mã Obj-C thành ruby: http://pragmaticstudio.com/screencasts/rubymotion –

+4

Tôi đoán hành động chụm của bạn sẽ trông giống như sau: 'def pinch (recognizer)' có nghĩa là bộ chọn của bạn sẽ thực sự là 'pinch:' –

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

self.faceView.addGestureRecognizer(@gesture) 

def pinch(foo) 

end 

Nếu bạn không muốn xử lý phương pháp để có một lập luận, sử dụng action:'pinch' để thay thế. Sau đó nó sẽ tìm kiếm một phương pháp như thế này:

def pinch 

end 

Sử dụng một var dụ (@gesture = ...) là một ý tưởng tốt ở đây bởi vì đôi khi recognizers cử chỉ và GC không chơi tốt với nhau nếu bạn không thực hiện các cử chỉ var một instance var của UIViewController. (Theo kinh nghiệm của tôi)

Các vấn đề liên quan