如何控制strokeEnd动画线速度

时间:2016-08-02 02:39:17

标签: ios animation

我想在iOS中创建一个原子动画动画,但有些麻烦无法解决。 here is my animation result

    沿着bezierPath的
  1. CAKeyframeAnimation 位置动画与 CABasicAnimation strokeEnd动画不匹配(粒子动画与其尾迹动画不匹配)。

    2.尾流动画循环不连贯, CABasicAnimation 似乎不能代表冲程段,即strokeStart为正且strokeEnd为负。

  2. 我的代码:

        let atom = CAShapeLayer()
        var rect = CGRect(x: 0,y: 0,width: 5,height: 5)
        var path = UIBezierPath(roundedRect: rect,cornerRadius: 5.0)
    
        atom.path = path.CGPath;
        atom.strokeColor = UIColor.greenColor().CGColor
        atom.bounds = rect;
        rect = CGRect(x: 0,y: 0,width: 300,height: 50);
        path = UIBezierPath(ovalInRect:rect);
    
    
    
        let orbit = CAShapeLayer()
        orbit.path = path.CGPath;
        orbit.strokeColor = UIColor.whiteColor().CGColor
        orbit.lineWidth = 1;
        orbit.fillColor = UIColor.clearColor().CGColor
        orbit.bounds = CGPathGetPathBoundingBox(path.CGPath);
        orbit.position = CGPoint(x:150,y:25)
    
        rect = CGRect(x: 0,y: 0,width: 300,height: 50);
        path = UIBezierPath(ovalInRect:rect);
    
    
        let keyani = CAKeyframeAnimation(keyPath: "position");
        keyani.path = path.CGPath
        keyani.duration = 3.0;
        keyani.repeatCount = HUGE;
        keyani.additive = true
        keyani.calculationMode = kCAAnimationPaced
        keyani.rotationMode = kCAAnimationRotateAuto
    
    
        keyani.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionLinear);
        atom.addAnimation(keyani, forKey: "")
    
    
        let orbitAni = CABasicAnimation(keyPath: "strokeStart")
        orbitAni.byValue = 1.0
        orbitAni.cumulative = true
    
    
        let orbitAni1 = CABasicAnimation(keyPath: "strokeEnd")
        orbitAni1.fromValue = 0.0
        orbitAni1.toValue = 1.0
    
        let animationGroup = CAAnimationGroup()
        animationGroup.animations = [orbitAni,orbitAni1]
        animationGroup.duration = 3.0
        animationGroup.repeatCount = HUGE
    
    
        orbit.strokeStart = -0.2
        orbit.addAnimation(animationGroup, forKey: "");
        orbit.shadowRadius = 5.0;
        orbit.shadowColor = UIColor.greenColor().CGColor
        orbit.shadowOpacity = 0.5
        orbit.shadowOffset = CGSizeZero
    
        var trans = CGAffineTransformIdentity
        trans = CGAffineTransformRotate(trans, CGFloat(M_PI_4))
    
        repeator.instanceTransform = CATransform3DMakeAffineTransform (trans)
        repeator.instanceCount = 4;
        repeator.instanceDelay = 0;
        repeator.addSublayer(orbit)
        repeator.addSublayer(atom)
        repeator.bounds = CGRect(x: 0,y: 0,width: 300,height: 50)
        repeator.position = CGPoint(x:200,y:200)
        repeator.anchorPoint = CGPoint(x:0.5,y:0.5)
        repeator.instanceAlphaOffset = 1.0
    

0 个答案:

没有答案