您的位置:首页 > 移动开发 > IOS开发

关于在项目中用到的动画效果(浅析)

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绘制路线  最后就是为其添加动画效果  最后添加在想要显示的控件上  

今天就写到这里吧  随时想到 或者学习到的话 会继续添加的  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 动画