我有一个非常奇怪的问题,试图沿圆弧动画三角形,从-π/ 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π,则时间是正确的。什么可能导致这个问题?
代码是带有Xamarin.iOS的C#,但Objective C / Swift代码类似。
编辑:
我发现如果我从0 - 2π创建一个UIBezierPath
弧然后用-π/ 2旋转它,它就可以工作。所以我怀疑Xamarin.iOS和UIBezierPath
有负角度可能会发生一些可疑的事情。
答案 0 :(得分:2)
我制作了一个快速原型应用程序来测试它。为简单起见,我使用的是图像而不是形状图层。结果如下:
-M_PI_2
到3 * M_PI_2
的动画效果符合预期path
)这让我相信也许你的问题埋没在Xamarin.iOS中。有一些CGFloat
类型的怪癖,所以也许你可以明确地转换参数,这可能会有所帮助。