2013-10-19 81 views
4

對於活性可可,我還是比較新的,我試圖在遊戲中加入玻璃鋼的元素。在我的網上搜索中,Reactive cocoa的資源和文檔看起來非常有限,大多數教程都使用相同的示例!使用活性可可觀察UITouches?

我想要做的就是讓RACSignal爲視圖上的當前觸摸提供一個值流(假設爲了簡單起見,不需要多點觸摸)。然後使用subscribeNext在UITouch對象發生變異時執行我的操作。我無法設置RAC信號本身!

目前Im做以下(其中林不知道是正道!)

@interface MyView:UIView{ 

     UITouch *currentTouch; 
     RACSignal *touchSignal; 
    } 
    @property(nonatomic , assign)UITouch *currentTouch; 



    @implementation MyView 
    @synthesize currentTouch; 

    -(id)init{ 
    if(self = [super init]){ 

    } 
    return self; 
    } 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 

    NSArray *touchArray = [touches allObjects]; 
    for(UITouch *touch in toucheArray){ 
     currentTouch = touch; 
     if(!touchSignal){ 
      touchSignal = [RACObserve(self , currentTouch) distinctUntilChanged]; 
     } 

    } 

} 

但每次我的RACSignal試圖初始化遊戲崩潰,我得到如下:

[MyView rac_valuesForKeyPath:observer:]: unrecognized selector sent to instance 0x2084cf90 

我做錯了什麼?建立RACSignal的正確方法是什麼?另外,如何在不同的對象(可能是MyView模型)中使用觸摸信號並使用訂閱接下來在塊中執行操作?

回答

2

這就是我將如何使用-rac_signalForSelector:。這是更具說明性的,不太必要的(這是我認爲你的錯誤來自的地方)。

RACSignal *touchSignal = [[[self 
    rac_signalForSelector:@selector(touchesBegan:withEvent:)] 
    reduceEach:^(NSSet *touches, UIEvent *event) { 
     return [touches anyObject]; 
    }] 
    distinctUntilChanged] 
+0

謝謝你一定會試試看。和我假設我可以訂閱(使用[[MyViewInstance觸摸信號] subscribeNext:....])到我的touchSignal在另一個對象,只要它的MyView公共屬性? – Sagar

+0

是的,任何可以訪問信號的代碼都可以訂閱它。 –

+0

試過了。有同樣的問題!我得到這個 終止應用程序由於未捕獲的異常'NSInvalidArgumentException',原因:' - [MyView rac_signalForSelector:]:無法識別的選擇發送到實例0x20874d80'。 我錯過了什麼? – Sagar