Ios 无法设置slider.value(当用户更改滑块位置时)?

Ios 无法设置slider.value(当用户更改滑块位置时)?,ios,model-view-controller,infinite-loop,uislider,Ios,Model View Controller,Infinite Loop,Uislider,在在线课程(第6课)中,构建了一个应用程序,其中有一个滑块作为输入,一个自定义视图作为输出 更改滑块时,视图控制器将再次设置滑块值。 中视图控制器的重要位: @实现HappinessViewController @综合幸福; -(作废)更新 { //从HappinesChanged调用时的分配循环:? self.slider.value=self.happiness;//将滑块设置为模型的(校正)值 [self.faceView setNeedsDisplay]; } -(void)setHap

在在线课程(第6课)中,构建了一个应用程序,其中有一个滑块作为输入,一个自定义视图作为输出

更改滑块时,视图控制器将再次设置滑块值。

中视图控制器的重要位:

@实现HappinessViewController
@综合幸福;
-(作废)更新
{
//从HappinesChanged调用时的分配循环:?
self.slider.value=self.happiness;//将滑块设置为模型的(校正)值
[self.faceView setNeedsDisplay];
}
-(void)setHappiness:(int)newHappiness
{
如果(newHappiness<0)newHappiness=0;//限制值
如果(新幸福>100)新幸福=100;
幸福=新的幸福;
[self updateUI];//更改后的幸福感应更新视图
}
-(iAction)HappinesChanged:(UISlider*)发送方//由已更改的滑块调用
{
self.happiness=sender.value;//调用setter setHappiness:
}
这不会导致循环(滑块更改->模型更新->更改滑块->?)?


或者这是一个好的做法吗?

如果滑块是从代码更新的,而不是由用户更新的,那么它可能不会发送valueChanged操作。所以你不会得到一个无限循环


这可用于“更正”用户选择的值,或将滑块强制到常规记号上,而不是平滑缩放

如果滑块是从代码更新的,而不是由用户更新的,则它可能不会发送valueChanged操作。所以你不会得到一个无限循环


这可用于“更正”用户选择的值,或将滑块强制到常规记号上,而不是平滑缩放

好问题。在UISlider文档中我能找到的唯一线索是:“如果
NO
,滑块仅在用户释放滑块的拇指控件以设置最终值时发送动作事件。”我想这就是“连续”属性吧?在讲座中,这必须设置为
YES
,因为smily在拖动滑块时会更改其微笑。我想问题是相同的,但表现形式不同-使用
YES
和一个不合适的
滑块。值
转换可能是一个不稳定的用户界面+可能是一个动作循环,而使用
NO
可能只是循环。是的,我知道
continuous
可能没有关系。我刚才提到它是因为它讨论了何时发送动作事件。但我仍然不确定这是否保证在总体上有效。这可能是一个关于的好问题。谢谢。注意你的链接拼错了。问得好。在UISlider文档中我能找到的唯一线索是:“如果
NO
,滑块仅在用户释放滑块的拇指控件以设置最终值时发送动作事件。”我想这就是“连续”属性吧?在讲座中,这必须设置为
YES
,因为smily在拖动滑块时会更改其微笑。我想问题是相同的,但表现形式不同-使用
YES
和一个不合适的
滑块。值
转换可能是一个不稳定的用户界面+可能是一个动作循环,而使用
NO
可能只是循环。是的,我知道
continuous
可能没有关系。我刚才提到它是因为它讨论了何时发送动作事件。但我仍然不确定这是否保证在总体上有效。这可能是一个关于的好问题。谢谢。请注意,您的链接拼写错误。好的,我有机会检查:设置滑块值不会触发
值更改
。好的,我有机会检查:设置滑块值不会触发
值更改
@implementation HappinessViewController

@synthesize happiness;

- (void)updateUI
{
    // assignment-loop when called from happinessChanged:?
    self.slider.value = self.happiness; // sets slider to model's (corrected) value
    [self.faceView setNeedsDisplay];
}

- (void)setHappiness:(int)newHappiness
{
    if (newHappiness < 0) newHappiness = 0; // limit value
    if (newHappiness > 100) newHappiness = 100;
    happiness = newHappiness;
    [self updateUI]; // changed happiness should update view
}

- (IBAction)happinessChanged:(UISlider *)sender // called by changed slider
{
    self.happiness = sender.value; // calls setter setHappiness:
}