更改UIView alpha值

时间:2012-07-07 15:18:09

标签: objective-c ios ios5 uiview

我正在尝试创建一个UIView并更改其alpha属性以模拟背光变化。 这是我的代码

    TransparentView = [[UIView alloc] initWithFrame:self.view.bounds];
    TransparentView.backgroundColor = [UIColor whiteColor];
    self.view = TransparentView;

    TransparentView.alpha = 0.2; 
    float step = 1.0 / ( appDelegate.OnOffTime * 100);
    for (float f = 0; f < 1; f=f+step) {
        TransparentView.alpha = (CGFloat)(1 - f);
        [NSThread sleepForTimeInterval:0.01];
}

TransparentView.alpha = 0.2TransparentView.alpha = (CGFloat)(1 - f)都会更改TransparentView.alpha,但只有TransparentView.alpha = 0.2会更改实际设备的“亮度”。 我做错了什么?

3 个答案:

答案 0 :(得分:3)

我认为问题在于您正在休眠线程,而不是实际设置异步计时器。这意味着,你实际上并没有让运行循环绕过来在屏幕上进行更改,因为你没有退出这个循环,直到它回到1: - )

编辑:澄清:

在运行循环“返回”之前,您对UI所做的任何更改都不会被实际绘制,这需要您的方法返回。您可能需要一个NSTimer实例,配置为在此对象上调用一个方法,该方法增加alpha(并根据目标值检查alpha;在计时器到达时使计时器无效。

答案 1 :(得分:2)

您可能需要考虑更改代码以使用内置的UIView动画支持。这将确保您的视图更新,并且您没有睡眠主线程。如果您需要在动画完成后执行一些特殊操作,则可以使用该方法的完成:版本。

TransparentView.alpha = 0.2;
[UIView animateWithDuration: appDelegate.OnOffTime animations:^{
    TransparentView.alpha = 0.0;
}];

答案 2 :(得分:1)

Alpha和亮度是视图的两个不同概念。如果你真的想要改变显示器的亮度,你可以使用iOS 5 +&#39; [[UIScreen mainScreen]brightness];,否则你的alpha变化需要在黑色背景下,而不是使用像投射1这样的奇怪数字-浮动。我的赌注是你的小算法返回一个足够大的步长因子,你的视图被告知要显示超过一个的alpha值(无论如何默认为一个)。