图形的初级变化使用View

图形的初级变化使用View

view就是一个试图,而viewController就是这些试图的一个容器--试图控制器。以下内容是view的一小部分关联,主要是按钮的使用,试图的变化。在Main.storyboard里面添加控件,如下图

试图上的button分别是:

  1. switch按钮。我们常见的一种按钮,有打开喝关闭两种状态。
  2. 灰色区域--一个view添加背景色为灰色,目的是让读者看见将要变化的一段区域。
  3. Action按钮。使view变化颜色。
  4. Stop按钮。使变化颜色和转动暂停。
  5. rotation按钮。点击后使 view转动。

代码部分:

  1.在代码中添加view、switch,_view.link.

 1 @property (weak, nonatomic) IBOutlet UIView *myView

2 @property (weak, nonatomic) IBOutlet UISwitch *mySwitch; 

{
    UIView *_view;
    //颜色数组
    NSMutableArray *_colorArray;
    
}

@property (nonatomic, strong) CADisplayLink *link;

 

  2.循环创建7个新的试图view,并且为每一个view都添加背景色。随机颜色的设置和固定颜色写入。

 1     //创建视图 并添加到父视图
 2     for (int i = 0 ; i < 7; i++) {
 3         _view = [[UIView alloc] initWithFrame:CGRectMake(10 * i, 10 * i, self.myView.bounds.size.width - 2 * 10 * i, self.myView.bounds.size.height - 2 * 10 * i)];
 4         /*
 5         //随机颜色设置
 6         _colorArray = [NSMutableArray arrayWithObjects:
 7                        [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1],
 8                        [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1],
 9                        [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1],
10                        [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1],
11                        [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1],
12                        [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1],
13                        [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1], nil ];
14         */
15         
16         //给颜色建立数组,(最麻烦的方法)
17         _colorArray = [NSMutableArray arrayWithObjects:[UIColor redColor],[UIColor greenColor],[UIColor blueColor],[UIColor grayColor],[UIColor yellowColor],[UIColor purpleColor],[UIColor orangeColor], nil];
18         //并且是每个view都有颜色
19         _view.backgroundColor = _colorArray[i];
20         //添加到view显示
21         [self.myView addSubview:_view];
22         
23     }

  3.颜色变化效果代码及效果图

 1 //开始动画
 2 - (IBAction)startAction:(UIButton *)sender {
 3     //判断switch是否打开
 4     if (_mySwitch.isOn) {
 5   //每秒调用一次方法
 6 //  [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(action:) userInfo:nil repeats:YES];
 7     //作用:只能点击一次有效,点击多次无效
 8     if (self.link) {
 9         return;
10     }
11     //每秒调用60次方法
12     CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(action:)];
13     
14     [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
15     //设置全局的link
16     self.link = link;
17     }
18 }
19 
20 - (void)action:(CADisplayLink *)timer{
21 //- (void)action:(NSTimer *)timer{//使用NSTimer的时候
22     //将每张视图加入到数组里面
23     NSArray* subViews = [self.myView subviews];
24     //循环遍历数组,改变颜色
25     for (int i = 0; i < 7; i++) {
26         _view = subViews[i];
27         //使颜色轮流变化
28         if (i == 6) {
29             //当颜色是最后一个时候,变为第一个
30             _colorArray[i] = _colorArray[0];
31         }else{
32             //把颜色变为下一个
33             _colorArray[i] = _colorArray[i+1];
34         }
35         //给每一个view添加背景色
36         _view.backgroundColor = _colorArray[i];
37         [self.myView addSubview:_view];
38     }
39 }
  1. NSTimer与CADisplayLink区别:NSTIimer每秒(可以设置秒数,比如0.1秒)调用一次,看着比较机械,而CADisplayLink每秒调用方法60次(刷新60次),速度太快,看不清楚。
  2. 当switch打开的时候,点击Action有效果,而关闭后则点击无效果。 

这是CADisplayLink效果图,录制效果不佳,实现效果是可以的

这是NSTimer(时间为1秒)效果图,使用NSTimer时候没有暂停方法。

 

点击Stop之后,会暂停,无论是颜色变化还是旋转,都会暂停,使用的是同一个方法。

1 //停止按钮
2 - (IBAction)stop:(UIButton *)sender {
3     //从所有runloop模式删除对象(如果已经隐式地释放接收机留存)和释放的目标对象
4     [self.link invalidate];
5     //将self.link设置为nil
6     self.link = nil;
7 }

旋转代码:

 1 //旋转按钮
 2 - (IBAction)rotation {
 3     if (self.link)    return;
 4      CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(rotationAct)];
 5     [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
 6     self.link = link;
 7 }
 8 //旋转动画
 9 - (void)rotationAct {
10     //这是转动效果
11     //M_PI/100是因为转动太快,如此之后看着正常
12     self.myView.transform = CGAffineTransformRotate(self.myView.transform, M_PI/100);
13         //开始缓慢
14         [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
15         [self.myView addSubview:_view];
16

总结:

  1. CADisplayLinkd的使用以及停止的使用。
  2. 角度旋转。transform的使用
  3. 颜色互相变化的方法。

 

欢迎读者提出宝贵意见,欢迎查阅!如需转载,请标明出处。

 

posted @ 2015-10-03 12:28  戎马一书生  阅读(216)  评论(0编辑  收藏  举报