2012-11-21 22 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中正确连接。如果没有,请将其删除并重新添加到笔尖/故事板中。这应该解决这个问题。

相关问题