霓虹灯创建流程:
<一>:因为它是一个自定义视图,所以必须在它他的初始化方法中,创建,使用for循环创建多个UIView:
1、坐标设置:X和Y坐标设置成零,因为最终是要让他显示在屏幕中心的,即使在这块给X和Y设置了值,最终设置它的center点,这块的设置也是无效的,
2、设置宽:霓虹灯的效果是从大到小以循环的方式显示,所以宽为,第一个View的宽减去间隔30再乘以i,(这块的i就代表的时循环的次数,意思就是说每循环一次。减一次30.这样就不会重叠)。
3、设置高:所以高为,第一个View的高减去间隔30再乘以i,(这块的i就代表的是循环的次数,意思就是说每循环一次。减一次30.这样就不会重叠)。
4、设置视图的形状(有圆形、矩形)如果不设置这个方法时,默认是矩形,因为每个视图本身就是一个矩形view.layer.cornerRandius = CGRectGetWidth(view.frame)/2;
5、设置定时器:视图创建设置属性完成之后,就得给视图设置定时器了,其实和BUtton的按钮方法差不多,只不过这个方法是系统自己调用的,不用我们自己手动点击实现此方法。
[NSTimer scheduledTimerWithTimeInterval:0.12 target:self selector:@selector(changeColor) userInfo:nil repeats:YES];
6、定时器的回调方法:
(1)、先将视图由小到大进行一次视图交换,也就是循环一次,循环的时候时根据颜色进行循环的,所以必须先得到视图的颜色,然后交换视图的颜色即可
7、具体代码实现如下
//霓虹灯的初始化方法
-
(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
for (int i = 0; i < 17; i++) {
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(frame)-30 *i, CGRectGetHeight(frame)-30 *i)];
view.backgroundColor = RGBA;
view.center = self.center;
view.tag = 1000+i;
// 将视图设置为圆形
view.layer.cornerRadius = CGRectGetWidth(view.frame)/2;
[self addSubview:view];
// 定时器创建
* @param NSTimeInterval :设置多长时间调用一次回调方法,单位为妙
* target:执行回调方法的目标
* selector:回调方法
* userInfo:如果回调方法中加了冒号,就表示有参数,这个参数就是userInfo
repeats:是否重复执行,YES为执行,NO为不执行
}
[NSTimer scheduledTimerWithTimeInterval:0.12 target:self selector:@selector(changeColor) userInfo:nil repeats:YES];
}
return self;
}
//定时器的回调方法
-(void)changeColor
{
//每执行一次,将由小到大的视图交换一遍
for (int i=0; i<16; i++)
{
第一种扩散模式:由外向内扩散
//得到某一个视图的颜色,并且让这个霓虹灯的颜色是由外向内扩散的
// UIColor *myColor=[[self viewWithTag:1016-i]backgroundColor];
// 得到某一个视图的颜色,并且让这个霓虹灯的颜色是由外向内扩散的
// UIColor *nextColor=[[self viewWithTag:1016-i-1]backgroundColor];
//
// [[self viewWithTag:1016-i]setBackgroundColor:nextColor];
// [[self viewWithTag:1016-i-1]setBackgroundColor:myColor];第二种扩散模式:由内向外扩散的
// 得到某一个视图的颜色,并且让这个霓虹灯的颜色是由内向外扩散的
UIColor *myColor=[[self viewWithTag:1000+i]backgroundColor];
得到某一个视图的颜色,并且让这个霓虹灯的颜色是由内向外扩散的
UIColor *nextColor=[[self viewWithTag:1000+i+1]backgroundColor];
[[self viewWithTag:1000+i]setBackgroundColor:nextColor];
[[self viewWithTag:1000+i+1]setBackgroundColor:myColor];