Xamarin.Forms iOS Создание анимации с использованием изображений

Я работаю над Xamarin.Fomrs общим проектом. Я хочу отображать несколько изображений в одном месте с интервалом 100 мс. Так что это будет выглядеть как GIF. В андроиде работает. Я создал файл для рисования и поместил в него все изображения с временным интервалом. Но в iOS я столкнулся с проблемой.

Я обнаружил, что CAKeyFrameAnimation используется для реализации этого типа функций. Но я не мог найти, как реализовать это, как я хочу.

Я реализовал CAKeyFrameAnimation в ImageRenderer вот так

 class AnimatedImageRenderer : ImageRenderer
    {
        public AnimatedImageRenderer() { }
        Animation objAnimation = new Animation();
        protected override void OnElementChanged(ElementChangedEventArgs<Image> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                try
                {
                    CAKeyFrameAnimation anim = CAKeyFrameAnimation.FromKeyPath("contents");

                    anim.Duration = 1;
                    //anim.KeyTimes = new[] {
                    //                NSNumber.FromDouble (0),    // FIRST VALUE MUST BE 0
                    //                NSNumber.FromDouble (0.1),
                    //                NSNumber.FromDouble(0.2),
                    //                NSNumber.FromDouble(0.3),
                    //                NSNumber.FromDouble(0.5),
                    //                NSNumber.FromDouble(0.6),
                    //                NSNumber.FromDouble(0.8),
                    //                NSNumber.FromDouble(1.0),   // LAST VALUE MUST BE 1
                    //                };
                    anim.Values = new NSObject[] {
                                    FromObject(UIImage.FromFile("bomb1.png")),
                                    FromObject(UIImage.FromFile("bomb2.png")),
                                    FromObject(UIImage.FromFile("bomb3.png")),
                                    FromObject(UIImage.FromFile("bomb4.png")),
                                    FromObject(UIImage.FromFile("bomb5.png")),
                                    FromObject(UIImage.FromFile("bomb6.png")),
                                    FromObject(UIImage.FromFile("bomb7.png")),
                                    };
                    //anim.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.Linear);
                    anim.RepeatCount = 1;
                    anim.RemovedOnCompletion = false;
                    //anim.CalculationMode = CAAnimation.AnimationLinear;
                    //c.Init();
                    Control.Layer.AddAnimation(anim, "bomb");

                }
                catch (System.Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                    // ModCommon.TraceLog("AnimatedImageRenderer tm_Tick" + ex.Message);
                }
            }
        }
}

Я не знаю, какое дополнительное свойство отсутствует. Пожалуйста, помогите мне.

Спасибо :)


person Monica    schedule 21.06.2019    source источник


Ответы (1)


Вы должны использовать CGImage вместо UIImage. Измените значение анимации на:

anim.Values = new NSObject[] {
                FromObject(UIImage.FromFile("bomb1.png").CGImage),
                FromObject(UIImage.FromFile("bomb2.png").CGImage),
                FromObject(UIImage.FromFile("bomb3.png").CGImage),
                FromObject(UIImage.FromFile("bomb4.png").CGImage),
                FromObject(UIImage.FromFile("bomb5.png").CGImage),
                FromObject(UIImage.FromFile("bomb6.png").CGImage),
                FromObject(UIImage.FromFile("bomb7.png").CGImage),
                };
person Anonymous    schedule 24.06.2019
comment
Спасибо за ответ. Вот чего мне не хватало :) - person Monica; 24.06.2019