2012-11-21 24 views
3

我現在正在xCode開發3天。上一次我做了UI開發,它是在Windows 3.1中與Petzold書。無論如何,我有我的第一個iOS應用程序啓動和運行,它基本上做我需要的。我有兩個滑塊來選擇色調和飽和度,並且爲了響應它們,我動態地繪製了一堆漸變陰影圓圈。我在Hello World示例和stackoverflow之間運行了很多,包括在CGLayer中緩存漸變(所以感謝所有的stackoverflow人員)。有一件我不太明白,但:如何以編程方式設置UISlider初始值,或者iOS程序如何啓動?

我想將一個滑塊的初始值設置爲1.0,而不是默認的0.5。我知道我可以在IB中做到這一點,但我更願意編寫代碼,我想我會完全放棄IB。我真的不明白它是如何連接的,我想了解代碼。我有這樣的代碼,試圖將其設置:

- (void)viewDidLoad 
{ 
    NSLog(@"viewDidLoad"); 
    [super viewDidLoad]; 
    [hue_slider setValue:0.5]; 
    [sat_slider setValue:1.0]; 
    self.led_view.hue_slider_value=0.5; 
    self.led_view.sat_slider_value=1.0; 
// Do any additional setup after loading the view, typically from a nib. 
} 

sat_slider仍然在中間,而不是在最後(1.0最大值)結束。從stackexchange的閱讀中,我明白我可能在錯誤的時間調用了這個函數,當調用viewDidLoad時滑塊還沒有真正加載,並且我的初始值被IB中指定的值覆蓋。但我沒有看到的是呼叫應該在哪裏進行。所以問題:

凡在我的節目,我應該把

[sat_slider setValue:1.0]; 

,使其將滑塊的初始值,覆蓋在IB默認?有人可以解釋iOS程序中的事件啓動順序嗎?而關於iOS和Objective C編程的在線或印刷書籍的指針會很棒。

編輯

當我檢查sat_slider的價值是零。那意味着連接丟失了?我將其拖入故事板並創建了一個IBOutlet以及一個動作。

@interface led_testViewController : UIViewController 

- (IBAction)saturation_scroll:(id)sender; 
- (IBAction)hue_scroll:(id)sender; 

@property (retain, nonatomic) IBOutlet UISlider *hue_slider; 
@property (retain, nonatomic) IBOutlet UISlider *sat_slider; 
@property (strong, nonatomic) IBOutlet led_view *led_view; 

@end 
+3

您可以在設置值時檢查'sat_slider'是否不爲零?它是否通過IB正確連接? – iDev

+0

在你的'viewDidLoad'方法中拋棄它:'NSLog(@「sat_slider is:%@」,self.sat_slider);' – NJones

+0

類型的主題,但加載視圖和其他對象從筆尖有趣的是瞭解它如何工作和你會明白它是如何設置連接 - 這不是魔術,儘管有一些相反的說法:) –

回答

0

您可以將代碼放在- (void)viewWillAppear:(BOOL)animated;

+2

這是一個糟糕的做法,因爲'viewWillAppear:'在任何時候都會被調用。用戶切換到另一個選項卡並返回。如果在'viewDidLoad'中設置slider值不起作用,那麼應該修復一個更基本的問題(就像在這種情況下那樣)。 – MaxGabriel

0

我跟着ABC和NJones的建議,檢查sat_slider,它是零。 ViewController.h文件中有sat_slider和hue_slider的屬性,但仍有一些屬性丟失。我刪除了屬性,在IB中重新拖動它們,然後我可以在viewDidLoad中設置滑塊位置,而沒有任何問題。

0

檢查是否sat_slider無。還要確保它在IB中正確連接。如果沒有,請將其刪除並重新添加到筆尖/故事板中。這應該解決這個問題。

相關問題