Ios 无法设置slider.value(当用户更改滑块位置时)?
在在线课程(第6课)中,构建了一个应用程序,其中有一个滑块作为输入,一个自定义视图作为输出 更改滑块时,视图控制器将再次设置滑块值。 中视图控制器的重要位: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
@实现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:
}