Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 更改UIView alpha值_Objective C_Ios_Ios5_Uiview - Fatal编程技术网

Objective c 更改UIView alpha值

Objective c 更改UIView alpha值,objective-c,ios,ios5,uiview,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 s

我正在尝试创建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=[[UIView alloc]initWithFrame:self.view.bounds];
TransparentView.backgroundColor=[UIColor whiteColor];
self.view=透明视图;
透明度视图α=0.2;
浮动步长=1.0/(appDelegate.OnOffTime*100);
对于(浮动f=0;f<1;f=f+步长){
透明视野α=(CGFloat)(1-f);
[NSThread sleepForTimeInterval:0.01];
}
TransparentView.alpha=0.2
TransparentView.alpha=(CGFloat)(1-f)
都会改变
TransparentView.alpha
,但只有
TransparentView.alpha=0.2
会改变实际设备的“亮度”。
我做错了什么?

Alpha和亮度是视图的两个不同概念。如果您确实想更改显示器的亮度,可以使用iOS 5+的
[[UIScreen mainScreen]亮度]
,否则,您的alpha更改需要在黑色背景下进行,并且不要使用像强制1-float这样的奇怪数字。我敢打赌,您的小算法返回的阶跃因子足够大,因此您的视图会被告知在1上显示alpha值(无论如何默认为1).

对于视图来说,Alpha和亮度是两个不同的概念。如果您确实想更改显示器的亮度,可以使用iOS 5+的
[[UIScreen mainScreen]亮度]
,否则,您的alpha更改需要在黑色背景下进行,并且不要使用像强制1-float这样的奇怪数字。我敢打赌,您的小算法返回的阶跃因子足够大,因此您的视图会被告知在1上显示alpha值(无论如何默认为1).

我认为问题在于,您正在休眠线程,而不是实际设置异步计时器。这意味着,您实际上不会让运行循环在屏幕上进行更改,因为在返回到1:-)之前,您不会退出此循环

编辑:澄清:


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

我认为问题在于您正在休眠线程,而不是实际设置异步计时器。这意味着,您实际上不允许运行循环在屏幕上进行更改,因为您没有退出此操作循环,直到返回到1:-)

编辑:澄清:


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

您可能需要考虑更改代码以使用内置的uiVIEW动画支持。这将确保您的视图被更新,并且不会占用主线程。如果动画完成后,您需要做一些特殊的事情,您可以使用。n使用方法的完成:版本

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

您可能需要考虑更改代码以使用内置的UIVIEW动画支持。这将确保您的视图被更新,并且不会占用主线程。如果动画完成后,您需要做一些特殊的操作,则可以使用<强>完成:< /强>版本的方法。

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


如果更改[[UIScreen mainScreen]亮度]他们禁止你的应用程序进入appstore@Ask你确定吗?这看起来有文档记录并且我支持。非常确定。另外,在应用程序关闭时还原亮度级别存在错误。不支持。商店中有2个应用程序使用它。你是否遇到在用户上还原亮度级别的问题?请按主页按钮?如果你更改[[UI屏幕主屏幕]亮度]他们禁止你的应用程序进入appstore@Ask你确定吗?这看起来是有文档记录的并且我支持。非常确定。另外,在应用程序关闭时恢复亮度级别存在错误。不支持。商店中有2个应用程序使用它。你是否遇到在用户按下主页按钮时恢复亮度级别的问题?是否有类似于C的问题#这个。刷新()重新绘制屏幕?事实上,alpha由后台CALayer立即处理,并且使用drawRect重新绘制视图。不需要运行循环和计时器。ctrahey是对的。我修改了代码并抛出了循环。现在它可以工作了。但我仍然不明白为什么要打破循环来处理alphachanges@CodaFi,我只是做了一些测试ting进行验证;但是如果在主线程上运行这样的代码,则在返回之前不会对UI进行更新,在这种情况下,此时甚至不会调用drawRect(这是有意义的,因为alpha更改与组成相关,而不是与视图的实际像素数据相关)。是否有类似于C#this.Refresh()的内容重新绘制屏幕?事实上,alpha由后台CALayer立即处理,并且使用drawRect重新绘制视图。不需要运行循环和计时器。ctrahey是对的。我修改了代码并抛出了循环。现在它可以工作了。但我仍然不明白为什么要打破循环来处理alphachanges@CodaFi,我只是做了一些测试ting进行验证;但是如果在主线程上运行这样的代码,则在返回之前不会对UI进行更新,在这种情况下,此时甚至不会调用drawRect(这很有意义,因为alpha更改与组成相关,而不是与视图的实际像素数据相关)。