关于在项目中用到的动画效果(浅析)
2016-06-13 14:01
351 查看
改需求的感觉可能是我做程序猿这么久以来最糟糕的感觉了
每个让你改需求的人站你后边指指点点 这会让你觉得没什么尊严:凭什么你让我改我就该
但是 没办法 你还是得改
要说该需求这种事情 如果只有产品要求的话 那问题还不大 毕竟一个人只有一种思想 改改就好
最怕的是
你的老总也爱管这事
比如我们 老总简直就是产品 UI 美工 数据的合体版
所有的问题 甚至数据对不对 也非要插上一脚
有一次 发现城市列表少了城市 让我们该 我擦 这个我们怎么改 后台的问题好嘛
没办法 提给后台
后台说了一句至今难以忘怀的话 :我也不知道 反正代码丢失很严重
你牛
不但数据 界面好不好看也要管
前几天好了点时间做了个动画效果的启动页 他们看着也觉得不错 没想到不如老板法眼
一句改 硬生生的让我的动图变为了四个美女帅哥的图片来代替
没办法 谁让你是老板呢
好吧 今天确实因为这些东西整的心情不好 还是先回归正题吧 下面从简单的开始说吧
1.首先从最简单的地方开始说吧
首先在启动界面使用了旋转图片的方法
//开始旋转
-(void) startAnimationEarth{
CGAffineTransform endAngle =CGAffineTransformMakeRotation(angle * (M_PI
/180.0f));
[UIViewanimateWithDuration:0.4delay:0options:UIViewAnimationOptionCurveLinearanimations:^{
imageViewEarth.transform = endAngle;
} completion:^(BOOL finished) {
angle +=10;
if (angle >1000) {
NSLog(@"动画结束!!!");
}else{
[selfstartAnimationEarth];
}
}];
}
原理很简单 就是每隔一定时间增加图片的旋转角度 无限循环 但是需要注意的是页面在消失了也会走 所以需要结束掉循环 所以在角度大于多少做了个判断让他不循环
这个角度可是设大点 因为在页面消失的时候不管角度多大 他都会满足这个条件并结束循环的
2.简单的图片旋转
之前做的时候 就是再UIview的动画结束的时候 改变图片 但是后来发现这样太low了 后来加了这行代码
self.upImage.transform =CGAffineTransformMakeRotation(M_PI);(不能写在UIview的finished里面
改变图标方向 但是没有动画效果)
如果转回来的话 需要旋转360度 因为·他的旋转是相当于最初的位置
CGAffineTransform这个方法 包含了图片的旋转 放大 平移 缩放等效果 而且还有多种效果组合的方法 在一些项目中合理使用 会使APP增色不少
3.贝塞尔曲线
贝塞尔曲线是很需要数学功底的 不是因为方法难 而是因为点的位置很难确定
NSIntegerconst Simble_SIZE =
60;
UIBezierPath *path = [UIBezierPathbezierPathWithArcCenter:CGPointMake(label.frame.size.width
/ 2, Simble_SIZE/2)radius:Simble_SIZE/2
-2.5 startAngle:0endAngle:M_PI*2clockwise:YES];
path.lineCapStyle =kCGLineCapRound;
path.lineJoinStyle =kCGLineCapRound;
[path moveToPoint:CGPointMake(label.frame.size.width
/ 2 - 10,Simble_SIZE/2)];
CGPoint p1 =CGPointMake(label.frame.size.width
/2, Simble_SIZE/2+10);
[path addLineToPoint:p1];
CGPoint p2 =CGPointMake(label.frame.size.width
/2 + 10,Simble_SIZE/4);
[path addLineToPoint:p2];
CAShapeLayer *layer = [[CAShapeLayeralloc]
init];
layer.fillColor = [UIColorclearColor].CGColor;
layer.strokeColor = [UIColorcolorWithRed:0/255.green:161/255.blue:233/255.alpha:1.f].CGColor;
layer.lineWidth =5;
layer.path = path.CGPath;
CABasicAnimation *animation = [CABasicAnimationanimationWithKeyPath:NSStringFromSelector(@selector(strokeEnd))];
animation.fromValue =@0;
animation.toValue =@1;
animation.duration =0.5;
[layer addAnimation:animationforKey:NSStringFromSelector(@selector(strokeEnd))];
label.layer.backgroundColor = [[UIColorwhiteColor]CGColor];
[label.layeraddSublayer:layer];
就是一个简单的圆圈 加上一个对号的曲线 但是点的位置还是想了好久
原理是通过贝塞尔曲线绘制路线 再通过layer绘制路线 最后就是为其添加动画效果 最后添加在想要显示的控件上
今天就写到这里吧 随时想到 或者学习到的话 会继续添加的
每个让你改需求的人站你后边指指点点 这会让你觉得没什么尊严:凭什么你让我改我就该
但是 没办法 你还是得改
要说该需求这种事情 如果只有产品要求的话 那问题还不大 毕竟一个人只有一种思想 改改就好
最怕的是
你的老总也爱管这事
比如我们 老总简直就是产品 UI 美工 数据的合体版
所有的问题 甚至数据对不对 也非要插上一脚
有一次 发现城市列表少了城市 让我们该 我擦 这个我们怎么改 后台的问题好嘛
没办法 提给后台
后台说了一句至今难以忘怀的话 :我也不知道 反正代码丢失很严重
你牛
不但数据 界面好不好看也要管
前几天好了点时间做了个动画效果的启动页 他们看着也觉得不错 没想到不如老板法眼
一句改 硬生生的让我的动图变为了四个美女帅哥的图片来代替
没办法 谁让你是老板呢
好吧 今天确实因为这些东西整的心情不好 还是先回归正题吧 下面从简单的开始说吧
1.首先从最简单的地方开始说吧
首先在启动界面使用了旋转图片的方法
//开始旋转
-(void) startAnimationEarth{
CGAffineTransform endAngle =CGAffineTransformMakeRotation(angle * (M_PI
/180.0f));
[UIViewanimateWithDuration:0.4delay:0options:UIViewAnimationOptionCurveLinearanimations:^{
imageViewEarth.transform = endAngle;
} completion:^(BOOL finished) {
angle +=10;
if (angle >1000) {
NSLog(@"动画结束!!!");
}else{
[selfstartAnimationEarth];
}
}];
}
原理很简单 就是每隔一定时间增加图片的旋转角度 无限循环 但是需要注意的是页面在消失了也会走 所以需要结束掉循环 所以在角度大于多少做了个判断让他不循环
这个角度可是设大点 因为在页面消失的时候不管角度多大 他都会满足这个条件并结束循环的
2.简单的图片旋转
之前做的时候 就是再UIview的动画结束的时候 改变图片 但是后来发现这样太low了 后来加了这行代码
self.upImage.transform =CGAffineTransformMakeRotation(M_PI);(不能写在UIview的finished里面
改变图标方向 但是没有动画效果)
如果转回来的话 需要旋转360度 因为·他的旋转是相当于最初的位置
CGAffineTransform这个方法 包含了图片的旋转 放大 平移 缩放等效果 而且还有多种效果组合的方法 在一些项目中合理使用 会使APP增色不少
3.贝塞尔曲线
贝塞尔曲线是很需要数学功底的 不是因为方法难 而是因为点的位置很难确定
NSIntegerconst Simble_SIZE =
60;
UIBezierPath *path = [UIBezierPathbezierPathWithArcCenter:CGPointMake(label.frame.size.width
/ 2, Simble_SIZE/2)radius:Simble_SIZE/2
-2.5 startAngle:0endAngle:M_PI*2clockwise:YES];
path.lineCapStyle =kCGLineCapRound;
path.lineJoinStyle =kCGLineCapRound;
[path moveToPoint:CGPointMake(label.frame.size.width
/ 2 - 10,Simble_SIZE/2)];
CGPoint p1 =CGPointMake(label.frame.size.width
/2, Simble_SIZE/2+10);
[path addLineToPoint:p1];
CGPoint p2 =CGPointMake(label.frame.size.width
/2 + 10,Simble_SIZE/4);
[path addLineToPoint:p2];
CAShapeLayer *layer = [[CAShapeLayeralloc]
init];
layer.fillColor = [UIColorclearColor].CGColor;
layer.strokeColor = [UIColorcolorWithRed:0/255.green:161/255.blue:233/255.alpha:1.f].CGColor;
layer.lineWidth =5;
layer.path = path.CGPath;
CABasicAnimation *animation = [CABasicAnimationanimationWithKeyPath:NSStringFromSelector(@selector(strokeEnd))];
animation.fromValue =@0;
animation.toValue =@1;
animation.duration =0.5;
[layer addAnimation:animationforKey:NSStringFromSelector(@selector(strokeEnd))];
label.layer.backgroundColor = [[UIColorwhiteColor]CGColor];
[label.layeraddSublayer:layer];
就是一个简单的圆圈 加上一个对号的曲线 但是点的位置还是想了好久
原理是通过贝塞尔曲线绘制路线 再通过layer绘制路线 最后就是为其添加动画效果 最后添加在想要显示的控件上
今天就写到这里吧 随时想到 或者学习到的话 会继续添加的
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Gifski:一个跨平台的高质量 GIF 编码器
- 模仿动画的放大缩小容器
- jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
- Android实现定制返回按钮动画效果的方法
- Android中ViewFlipper的使用及设置动画效果实例详解
- jQuery实现美观的多级动画效果菜单代码
- php判断GIF图片是否为动画的方法
- jQuery实现动画效果circle实例
- HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
- 浅析JavaScript动画
- js排序动画模拟-插入排序
- javascript+HTML5的Canvas实现Lab单车动画效果
- 基于javascript实现漂亮的页面过渡动画效果附源码下载