Lottie AnimationView Не работает в iOS, но работает в Android c # Реализация - PullRequest
0 голосов
/ 27 января 2019

При попытке воспроизвести анимацию на Android анимация отображается и воспроизводится правильно, однако на iOS анимация не отображается. При вызове element.IsPlaying мы получаем значение true.

Lottie правильно настроен для реализаций Android и iOS, файлы расположены в ресурсах и корневых папках проекта для Android и IOS, и установлены правильные действия сборки.

Последние 3 часа я потратил на поиски ответов, но безрезультатно, и попросил помощи.

Код:

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();
    }
}

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Поместите AnimationView в пользовательский элемент управления / ContentView и используйте его таким образом.Контейнер с XAML заставит его работать как положено.

0 голосов
/ 28 января 2019

После исследования я обнаружил, что большинство анимаций воспроизводятся из AnimationView, созданного с использованием XAML. Брэд Диксон предложил создать ContentView с XAML и создать пользовательское представление для 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...