У меня очень странная проблема, пытаясь анимировать форму треугольника по дуге окружности, от -π/2 до 2π-π/2 (для начала от вертикали должность). Как это:Видимая продолжительность и фактическая продолжительность анимации формы по дуге различны
// Construct the invisible animation path
var path = UIBezierPath.FromArc(new PointF(rect.GetMidX(), rect.GetMidY()), (rect.Height - 20)/2, (float)(- Math.PI/2), (float)(2*Math.PI - Math.PI/2), true);
var pathLayer = new CAShapeLayer();
pathLayer.Frame = rect;
pathLayer.Path = path.CGPath;
pathLayer.FillColor = UIColor.Clear.CGColor;
pathLayer.StrokeColor = UIColor.Clear.CGColor;
view.AddSublayer(pathLayer); // It appears that I need to create and add a layer to be able to animate along the path?
// Create the shape to animate
var triangleLayer = new CAShapeLayer();
var triangle = CreateTriangle();
triangleLayer.Frame = triangle.Bounds;
triangleLayer.Path = triangle.CGPath;
triangleLayer.StrokeColor = UIColor.Orange.CGColor;
triangleLayer.FillColor = UIColor.Red.CGColor;
var triangleAnim = CAKeyFrameAnimation.GetFromKeyPath("position");
triangleAnim.Path = path.CGPath;
triangleAnim.Duration = 60;
triangleAnim.RotationMode = CAKeyFrameAnimation.RotateModeAuto;
triangleAnim.RemovedOnCompletion = false;
triangleLayer.AddAnimation(triangleAnim, "progress");
view.AddSublayer(triangleLayer);
Полный раунд должен занять 60 секунд, но он заканчивается примерно через 45 секунд, а затем ничего не делает в течение 15 секунд, а затем завершает анимацию. Таким образом, анимация, кажется, занимает 60 секунд, но визуальная анимация составляет всего 45 секунд. Странно, что если я изменяю дугу от 0 до 2π, время будет правильным. Что может вызвать эту проблему?
Код C# с Xamarin.iOS, но код Objective C/Swift будет аналогичным.
Edit:
я узнал, что это работает, если я создаю UIBezierPath
дугу от 0 - его, а затем поверните его им/2. Поэтому я подозреваю, что есть что-то рыбное с Xamarin.iOS и UIBezierPath
с отрицательными углами.
Почему вы используете 'CAKeyFrameAnimation'? – Andy
Это тип анимации, который я мог бы найти, чтобы позволить мне анимировать слой по определенному пути. – NilsH
Я не вижу в вашем коде анимации ключевого кадра. Если вы не используете ключевые кадры, вы должны прибегнуть к 'CABasicAnimation', который анимируется от точки A до B, от PathA до PathB и т. Д. – Andy