2011-08-14 68 views
1

在線上Stanford CS193p iPhone Application Development課程第6講,構建了一個應用程序,該應用程序將滑塊作爲輸入,並將自定義視圖作爲輸出。設置slider.value時用戶更改滑塊位置時出錯?

當滑塊改變時,視圖控制器再次設置滑塊值。在Happiness 2.zip視圖控制器的

重要位:

@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: 
} 

不這個結果在一個循環中(滑塊改變 - >模型更新 - >改變滑塊 - >?)?

或者這甚至是好的做法?

+0

好問題。我能在UISlider文檔中找到的唯一線索是:「如果爲」NO「,則當用戶釋放滑塊的拇指控件以設置最終值時,滑塊僅發送一個操作事件。」 – jtbandes

+0

這將是我認爲的「連續」屬性?在演講中,當拖動滑塊時,它必須設置爲「是」,因爲笑臉會改變它的微笑。我猜這個問題會是相同的,但表現方式不同 - 用「YES」和一個不合適的'slider.value'翻譯它可能會是一個生澀的用戶界面+也許是一個動作循環,而用「否」它可能只是成爲循環。 – fabb

+0

是的,我知道「連續」可能沒有關係。我剛剛提到它是因爲它會在發送操作事件時討論*。但我仍然不確定這是否能保證一般工作。這可能是http://devforms.apple.com上的一個好問題。 – jtbandes

回答

1

如果滑塊是從代碼而不是用戶更新的,則推測不會發送valueChanged動作。所以你沒有得到一個無限循環。

這可以用於「更正」用戶選擇的值,或強制滑塊轉換爲常規刻度而不是平滑刻度。

+0

好吧,我有機會檢查:設置滑塊值不*觸發'值改變'。 – fabb