我正在尝试创建一个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.2
和TransparentView.alpha = (CGFloat)(1 - f)
都会更改TransparentView.alpha
,但只有TransparentView.alpha = 0.2
会更改实际设备的“亮度”。
我做错了什么?
答案 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值(无论如何默认为一个)。