private async Task AnimatePathTo(CAShapeLayer shapeLayer, float duration, UIBezierPath toBezierPath) { var fromCgPath = FromObject(shapeLayer.Path); var toCgPath = FromObject(toBezierPath.CGPath); shapeLayer.Path = toBezierPath.CGPath; await AnimationUtils.BasicAnimationAsync(shapeLayer, "path", duration, fromCgPath, toCgPath, CAMediaTimingFunction.EaseInEaseOut); }
public async Task Pulse(float duration) { var halfDuration = duration / 2; await AnimationUtils.BasicAnimationAsync(_layer, "strokeEnd", halfDuration, 0f, 1f, CAMediaTimingFunction.EaseInEaseOut); await AnimationUtils.BasicAnimationAsync(_layer, "strokeStart", halfDuration, 0f, 1f, CAMediaTimingFunction.EaseInEaseOut); await ResetLayer(); }
/// <summary> /// Resetting the strokeEnd and strokeStart is a little tricky since it will animate /// to the values you set it to if you aren't careful and that looks bad /// </summary> /// <returns></returns> private async Task ResetLayer() { _layer.Opacity = 0f; await AnimationUtils.BasicAnimationAsync(_layer, "strokeEnd", .01f, 1f, 0f, CAMediaTimingFunction.Linear); await AnimationUtils.BasicAnimationAsync(_layer, "strokeStart", .01f, 1f, 0f, CAMediaTimingFunction.Linear); _layer.Opacity = 1f; }