图形的初级变化使用View
view就是一个试图,而viewController就是这些试图的一个容器--试图控制器。以下内容是view的一小部分关联,主要是按钮的使用,试图的变化。在Main.storyboard里面添加控件,如下图
试图上的button分别是:
- switch按钮。我们常见的一种按钮,有打开喝关闭两种状态。
- 灰色区域--一个view添加背景色为灰色,目的是让读者看见将要变化的一段区域。
- Action按钮。使view变化颜色。
- Stop按钮。使变化颜色和转动暂停。
- 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 }
- NSTimer与CADisplayLink区别:NSTIimer每秒(可以设置秒数,比如0.1秒)调用一次,看着比较机械,而CADisplayLink每秒调用方法60次(刷新60次),速度太快,看不清楚。
- 当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
总结:
- CADisplayLinkd的使用以及停止的使用。
- 角度旋转。transform的使用
- 颜色互相变化的方法。
欢迎读者提出宝贵意见,欢迎查阅!如需转载,请标明出处。
时间: 2025-01-06 02:38:05