Lottie AnimationView 在 iOS 中不工作,但在 Android 中工作 c# 实现

Lottie AnimationView Not working in iOS but is working in Android c# Implementation

尝试在 Android 上播放动画时,动画显示并正确播放,但是,在 iOS 上,动画不显示。 调用 element.IsPlaying 时,我们得到 return 值为 true。

Lottie 已在 Android 和 iOS 实现中正确配置,文件位于 Android 和 iOS 的资产和根项目文件夹中以及正确的构建操作已设置。

代码:

public class xxx : ContentPage {
    AnimationView element = new AnimationView();

    public xxx()
    {
        element = new AnimationView() {
            Loop = true,
            AutoPlay = true,
            Animation = "splashyloader.json",
            WidthRequest = 400,
            HeightRequest = 400,
            VerticalOptions = LayoutOptions.FillAndExpand,
            HorizontalOptions = LayoutOptions.FillAndExpand,
            IsVisible = true,
            Speed=1
        };
    }
    protected override void OnAppearing(){
        element.Animation = "splashyloader.json";
        element.Play();
    }
}

经过调查,我发现大多数动画都是从使用 XAML 构造的 AnimationView 播放的。 Brad Dixon 建议使用 XAML 创建一个 ContentView 并为 Lottie Animation 构建一个自定义视图,然后可以毫无问题地以编程方式调用它。

一旦实施的初步测试表明它可以工作,进一步的测试表明我尝试使用的主要 Lottie JSON 动画文件将无法在 iOS 上工作(表明可能存在损坏)。

这似乎可行,但实际上并不是最佳设置。希望 Lottie 的未来版本能够使它过时。

AnimatingView.xaml

<?xml version="1.0" encoding="UTF-8"?>
    <ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="FoodMono.Views.AnimatingView" xmlns:forms="clr-namespace:Lottie.Forms;assembly=Lottie.Forms">
        <ContentView.Content>
            <forms:AnimationView x:Name="animation" Loop="True" AutoPlay="True" HeightRequest="300" WidthRequest="300" Speed="1" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Animation="5stars.json" />
        </ContentView.Content>
    </ContentView>

AnimatingView.xaml.cs

public partial class AnimatingView : ContentView
{
    string animationName = null;
    public AnimatingView(string AnimationName, bool loop=true, bool autostart=true)
    {
        InitializeComponent();
        animationName = AnimationName;
        animation.Animation = AnimationName;
        if(!loop)
            animation.Loop = loop;
        if(!autostart)
            animation.AutoPlay = autostart;


    }
    protected override void OnParentSet()
    {
        Console.WriteLine(animation.IsPlaying);
        this.Start();
        Console.WriteLine(animation.IsPlaying);
        base.OnParentSet();
    }
    public void Start()
    {
        animation.Play();
    }
    public void Stop()
    {
        animation.AbortAnimation(animationName);
    }
}

将您的 AnimationView 放入自定义 control/ContentView 中并以这种方式使用它。带有 XAML 的容器将使其按预期工作。