//@property (weak, nonatomic) IBOutlet UIImageView *imageView;
//@property (nonatomic) UIImage *image;
//@property (nonatomic) PhotoEffect *effect;
//@property (weak, nonatomic) IBOutlet UISwitch *glossSwitch;目前,我有一个问题,因为UISwitch不能与KVO一起工作。下面的代码仅在开关从初始状态更改时才触发:
RAC(self.imageView, image) = [[[[RACSignal
combineLatest:@[ RACObserve(self, image), [self.glossSwitch
rac_signalForControlEvents:UIControlEventValueChanged], RACObserve(self, effect)]]
deliverOn:[RACScheduler scheduler]]
reduceEach:^UIImage *(UIImage *im, UISwitch *glossSwitch, PhotoEffect *effect) {
if (!im) {
return nil;
}
if (effect) {
im = [im imageWithEffect:effect.type];
}
if (glossSwitch.on) {
im = [GlossyIcon applyShineToImage:im];
}
return im;
}]
deliverOn:RACScheduler.mainThreadScheduler];发布于 2014-02-04 11:12:44
-combineLatest:从阵列中的每个信号中累积一个“下一”项,直到所有信号都发送了一个。此时,它最终发送一个包含数组中每个信号的"next“值的RACTuple。
您的RACObserve信号在初始设置时分别发送一个"next“。当属性改变时,它们将在将来再次发送“next”。
根据控制事件,UISwitch将按照预期发送"next“。但由于RACObserve信号可能已停止发送“下一步”,它们会使您的UISwitch挂起,并且-combineLatest:不能发送超过第一个“下一步”的消息。所以你的-reduceEach:只会在第一次触发。
编辑:实际上,挂起-我刚刚重读了-combineLatest:的文档,它说一旦提供了第一组完整的“下一步”(对于每个信号),来自任何信号的任何额外的“下一步”应该会导致组合的信号传递一个包含每个信号的最新值的RACTuple。所以我不太确定发生了什么事,很抱歉没有回答!
https://stackoverflow.com/questions/21523145
复制相似问题