问题描述
|
看到那丑陋的黄色在哪里?我需要那种颜色来改变...很多。有点像幻视万花筒的东西,但始终只有一种颜色。非常类似于默认的OS X Spectrum屏幕保护程序。我应该怎么做呢? Objective-C似乎占用了大量cpu。我可以将OpenGL背景放入这样的内容吗?希望朝着正确的方向前进。
解决方法
好了,您可以安排一个函数调用大约半秒钟,然后像这样更改背景颜色
[NSTimer scheduledTimerWithTimeInterval:0.3f target:self selector:@selector(someMethod) userInfo:nil repeats:YES];
- (void)someMethod
{
self.view.backgroundColor = [UIColor redColor];
}
但是,这会将背景视图的颜色更改为仅红色,因此,为了将颜色更改为其他颜色,可以声明一个类变量或一个以上的类变量来更改背景颜色。并且在选择器方法中,您可以更改它们的值以获得一些很酷的效果。你可以做这样的事情。
self.view.backgroundColor = [UIColor colorWithRed:x green:y blue:z alpha:1.0f];
x += 0.01f;
y += 0.02f;
z += 0.04f;
if(x >= 1)
x = 0.01f;
if(y >= 1)
y = 0.02f;
if(z >= 1)
z = 0.04f;
, 首先尝试最简单的方法:只需在该视图上设置backgroundColor
属性,然后在适当的延迟后使用performSelector:withObject:afterDelay:
更改为下一个颜色。
除非您使用OpenGL来处理整个屏幕,否则这种方法不可能更快。瓶颈很可能是在背景上合成“球”图像和文本,而不是创建纯色背景。对其进行概要分析,而不是猜测或依靠我的猜测。
, 假设前景材质具有透明度。然后,我们可以在其后方拥有一个占据整个屏幕的实体视图,并且可以通过前景材质看到该视图的颜色。然后只要更改该背景视图的颜色即可。如果要动画化背景颜色的变化,请更改视图图层的backgroundColor(更改为CGColor);否则,请执行以下操作。效果将自动动画化。您需要链接到QuartzCore.framework并导入<QuartzCore/QuartzCore.h>
,然后您可以说:
theView.layer.backgroundColor = [[UIColor redColor] CGColor];
您可以修改此颜色动画;例如,可以通过设置CATransaction的动画持续时间(请参阅CATransaction类方法)来指定其持续时间(颜色变化的速度或速度)。我可以想象您会重复执行NSTimer,每次计时器触发时,您都会执行另一个换色动画。