iOS之弹幕效果

来源:互联网 发布:python 微信开发文档 编辑:程序博客网 时间:2024/04/30 12:43

弹幕效果展示:


步骤: 
1. 
在AppDelegate类里面创建一个视图控制器,并把创建的视图控制器放入父视图中。 
其中关于用[self.window addSubview:viewController.view] 
和self.window.rootViewController = viewController;请看我的上一篇文章:http://blog.csdn.net/u012989536/article/details/47979875

2. 
然后的步骤就需要我们好好地思考一下,做任何一件事都要做好计划,首先要确定要在我们创建的视图里面添加label 标签:设置标签的颜色这里不过多说。代码有注释。 

值得注意的是,我们的标签是并不是一个。而是一些标签进行循环的滚动,怎么达到这个效果呢。首先我们不能直接在viewDidLoad里面直接创建,以为这样不利于重复的生成,我们应该把它写在一个函数里面,以有利于我们调用。。于是有了这样一段代码:

[objc] view plaincopy
  1. //需要改变的三个地方,label :文本颜色,位置,文本的内容。  
  2. -(void)initDate  
  3. {  
  4.     ///只要有肉眼能看到的视图,都是以ui开头的  
  5.     //实例化一个标签,(用于现实文字)  
  6.     UILabel *label = [[UILabel alloc]init];  
  7.     //指定位置和大小。  
  8.     label.frame =CGRectMake(480, rand()%29025030);  
  9.     label.text = @“hello world”;  
  10.     label.textColor = [UIColor redColor];  
  11.     //将label加入本视图中去。  
  12.     [self.view addSubview:label];  
  13.   
  14. }  

*3. 
然后我们应该调用一个每隔一段时间就会产生一个label标签的方法。这样


[objc] view plaincopy
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.   
  5.     //设置一个计时器,每隔一段时间就会产生一个label  
  6.     [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(initDate) userInfo:nil repeats:YES];  
  7.   
  8. }  

4.

做到这个步骤,我们就能够看出一些效果,因为label会不停的增加。那怎么让它滚动起来呢? 

这时候就需要我们写一个move的方法,来控制label的移动。这时候就会用到UIView 的animateWithDuration 
方法:

(1):首先我们可以新建一个plist文件,用来存储需要显示的label,plist最好格式为数组类型的。 
(2):然后定义一个数组。用来存储plist里面的数据,并创建一个NSSstring类型的字符串用来接受。然后label以字符串的形式进行显示到view上面:代码如下:

[objc] view plaincopy
  1. //需要改变的三个地方,label :文本颜色,位置,文本的内容。  
  2. -(void)initDate  
  3. {  
  4.     NSString *str = [array objectAtIndex:rand()%array.count];  
  5.     ///只要有肉眼能看到的视图,都是以ui开头的  
  6.     //实例化一个标签,(用于现实文字)  
  7.     UILabel *label = [[UILabel alloc]init];  
  8.     //指定位置和大小。  
  9.     label.frame =CGRectMake(480, rand()%29025030);  
  10.     label.text = str;  
  11.     label.textColor = [UIColor randomColor];  
  12.     //将label加入本视图中去。  
  13.     [self.view addSubview:label];  
  14.     //让生成的label传入下面的move函数中去。  
  15.     [self move:label];  
  16. }  
  17.   
  18. -(void)move:(UILabel*)_label  
  19. {  
  20.     [UIView animateWithDuration:5 animations:^{  
  21.         _label.frame = CGRectMake(-250, _label.frame.origin.y, _label.frame.size.width, _label.frame.size.height);  
  22.     } completion:^(BOOL finished) {  
  23.         [_label removeFromSuperview];  
  24.     }  
  25.      ];  
  26. }  
  27. //从这个方法开始添加(装修)视图已经加载到内存中。  
  28. - (void)viewDidLoad  
  29. {  
  30.     [super viewDidLoad];  
  31.   
  32.     //读取plist文件  
  33.     NSString *path = [[NSBundle mainBundle ]pathForResource:@"弹幕" ofType:@"plist"];  
  34.     array = [[NSArray alloc]initWithContentsOfFile:path];  
  35.   
  36.     //设置一个计时器,每隔一段时间就会产生一个label  
  37.     [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(initDate) userInfo:nil repeats:YES];  
  38.   
  39. }  


(3):为了程序的健全性,我们让每一个产生出来的label的文本拥有不同的颜色,方法:新建一个UIColor的分类文件,然后写一个颜色不断改变的方法:

[objc] view plaincopy
  1. + (UIColor *)randomColor  
  2. {  
  3.     /* 
  4.      颜色有两种表现形式 RGB RGBA 
  5.      RGB 24 
  6.      R,G,B每个颜色通道8位 
  7.      8的二进制 255 
  8.      R,G,B每个颜色取值 0 ~255 
  9.      120 / 255.0 
  10.  
  11.      */  
  12.     CGFloat r = arc4random_uniform(256) / 255.0;  
  13.     CGFloat g = arc4random_uniform(256) / 255.0;  
  14.     CGFloat b = arc4random_uniform(256) / 255.0;  
  15.   
  16.     return [UIColor colorWithRed:r green:g blue:b alpha:1];  
  17. }  


注意:由于没生成一个label都会占用内存空间,所有,一定要生成后的释放工作,不然,长时间运行程序,内存会被占用的越来越多。

版权声明:本文为博主原创文章,未经博主允许不得转载。

0 0
原创粉丝点击