使用活性可可来观察UITouches?

时间:2013-10-19 06:54:14

标签: ios reactive-cocoa

我对反应性可可相当新,我试图在我试图构建的游戏中包含FRP的元素。从我的在线搜索中,Reactive cocoa的资源和文档似乎非常有限,大多数教程都使用相同的示例!

我想要做的是,使用RACSignal为视图上的当前触摸提供值流(为简单起见,假设没有多点触摸)。然后使用subscribeNext在UITouch对象发生变异时执行我的操作。我自己设置RAC信号时遇到了麻烦!

目前我正在做以下事情(我不确定是正确的方法!)

  @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模型)中使用touchSignal并使用subscribe next来执行块中的操作?

1 个答案:

答案 0 :(得分:2)

我就是这样做的,使用-rac_signalForSelector:。这更具说明性,更少命令性(这是我认为你的错误来自的地方)。

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