monotouch获取图像在屏幕上移动

时间:2011-02-18 23:26:29

标签: xamarin.ios

简单的要求,但证明是棘手的。

下面的示例代码我作为一个例子,我的最终目标是生成一个例程,使图像在给定的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");
    }

1 个答案:

答案 0 :(得分:1)

这是因为您正在为动画相同属性的图层添加动画,而上一个动画尚未完成。 通过挂钩到CABasicAnimation.AnimationStopped事件,尝试在上一个动画完成时添加下一个动画。不要忘记将From值设置为上一个To值,以便下一个动画继续完成最后一个动画。 另外,将RemovedOnCompletion设置为true,这样就不会在Layer中堆叠您不需要的已完成动画。