gpt4 book ai didi

ios - 使用 Reactive cocoa 观察 UITouches?

转载 作者:可可西里 更新时间:2023-11-01 05:55:02 25 4
gpt4 key购买 nike

我对 Reactive Cocoa 还很陌生,我正试图在我尝试构建的游戏中包含 FRP 元素。从我的在线搜索来看,Reactive cocoa 的资源和文档似乎非常有限,而且大多数教程都使用相同的示例!

我想要做的是,让 RACSignal 为 View 上的当前触摸提供值流(为简单起见,假设没有多点触摸)。然后使用 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 在 block 中执行操作?

最佳答案

这就是我的做法,使用 -rac_signalForSelector:。这更具声明性,更少命令性(我认为这是您的错误的来源)。

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

关于ios - 使用 Reactive cocoa 观察 UITouches?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19463330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com