简单的要求,但证明是棘手的。
下面的示例代码我作为一个例子,我的最终目标是生成一个例程,使图像在给定的x坐标上反弹。 但是目前我只是坚持让第二次移动的东西。 下面的动画只发生一次,不管From和To参数如何,我都无法上下移动。它只在加载时移动一次,即
private void LoadGetStarted() {
UIImageView imageView = new UIImageView();
UIImage getStartedImage = new UIImage("images/DownArrow.gif");
float leftPos = 80f;
RectangleF f2 = new RectangleF(leftPos,
130f,
200f,
181f);
imageView.Image = getStartedImage;
imageView.Frame = f2;
this.Add(imageView);
Animate(imageView,"y",-100f,-200f);
Animate(imageView,"y",-100f,200f);
Animate(imageView,"y",10,100f);
}
private void Animate(UIImageView imageView,string type,float top, float bottom) {
var theAnimation = CABasicAnimation.FromKeyPath("transform.translation."+type);
theAnimation.Duration = 3;
theAnimation.Speed = 2;
theAnimation.FillMode = CAFillMode.Both;
theAnimation.From = NSNumber.FromFloat(top);
theAnimation.To = NSNumber.FromFloat(bottom);
theAnimation.RemovedOnCompletion = false;
imageView.Layer.AddAnimation(theAnimation,"imageView");
}
答案 0 :(得分:1)
这是因为您正在为动画相同属性的图层添加动画,而上一个动画尚未完成。
通过挂钩到CABasicAnimation.AnimationStopped
事件,尝试在上一个动画完成时添加下一个动画。不要忘记将From
值设置为上一个To
值,以便下一个动画继续完成最后一个动画。
另外,将RemovedOnCompletion
设置为true
,这样就不会在Layer
中堆叠您不需要的已完成动画。