iOS-星球沿椭圆轨迹旋转

先看效果:


QQ20171222-170814-HD.gif

什么?太模糊!
来一张高清无码

图片.png

背景旋转

    CABasicAnimation *animation =  [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    //默认是顺时针效果,若将fromValue和toValue的值互换,则为逆时针效果
    animation.fromValue = [NSNumber numberWithFloat:0.f];
    animation.toValue =  [NSNumber numberWithFloat: M_PI *2];
    animation.duration  = 200;
    animation.autoreverses = NO;
    animation.fillMode =kCAFillModeForwards;
    animation.repeatCount = MAXFLOAT; //如果这里想设置成一直自旋转,可以设置为MAXFLOAT,否则设置具体的数值则代表执行多少次
    [ self.bgImaegview.layer addAnimation:animation forKey:nil];

星星的闪烁

-(CABasicAnimation *)opacityForever_Animation:(float)time
{
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];//必须写opacity才行。
    animation.fromValue = [NSNumber numberWithFloat:1.0f];
    animation.toValue = [NSNumber numberWithFloat:0.0f];
    animation.autoreverses = YES;
    animation.duration = time;
    animation.repeatCount = MAXFLOAT;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeForwards;
    animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];///没有的话是均匀的动画。
    return animation;
}

轨迹动画

   CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
        pathAnimation.calculationMode = kCAAnimationPaced;
        pathAnimation.fillMode = kCAFillModeForwards;
        pathAnimation.removedOnCompletion = NO;
        pathAnimation.repeatCount = CGFLOAT_MAX;
        pathAnimation.duration = 30.0;
        CGMutablePathRef ovalfromarc = CGPathCreateMutable();
        CGAffineTransform t2 = CGAffineTransformConcat(CGAffineTransformConcat(                                                                 CGAffineTransformMakeTranslation(-origin_x,-origin_y),                                                                             CGAffineTransformMakeScale(1, radiuscale)),                                                      CGAffineTransformMakeTranslation(origin_x, origin_y));
        CGPathAddArc(ovalfromarc, &t2, origin_x, origin_y, radiusX,beginAng,endAng, 0);
        pathAnimation.path = ovalfromarc;
        CGPathRelease(ovalfromarc);

绘制椭圆

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    UIBezierPath *arc = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(20+40, 25, SCREEN_WIDTH-40,SCREEN_WIDTH/2-50)];
    [COLOR(147.f, 151.f, 157.f,0.5f)  setStroke];
    [arc stroke];
    CGContextRestoreGState(context);

下面是demo地址
链接: https://pan.baidu.com/s/1bp4jHWr 密码: 5mt6

感谢作者:秋雨W
https://www.jianshu.com/p/d8cc02e7efa7

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,588评论 25 709
  • 1.昨天晚上小宝睡觉嫌热还是怎么着,一晚上不停哼唧,折腾到快五点才睡,所以,早上老公跟爸妈起床回老家,我一点动静也...
    华丽的美丽丽阅读 186评论 0 0
  • 初出茅庐,败于无知 巳时一刻,数不清的人影从街道尽头赶来。擂台上乌云密布,多空剑拔弩张。 他掏出秘籍,略略一看,大...
    投资人六便士阅读 389评论 0 1
  • 对于我们个人来说, 最重要的是什么? 成功?金钱?权利?名声?爱情?安全感?幸福感? 我认为都不是,当然,这些都很...
    跟小明一起养成好习惯阅读 2,027评论 0 28
  • 窗外风景独好,谁牵挂,窃窃语,默思量,仰望苍穹,低头无语,泪滴,情殇。
    彭轶群阅读 364评论 2 2