91 lines
3.3 KiB
C#
91 lines
3.3 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using System.Threading.Tasks;
|
|
using Pixiview.iOS.Renderers;
|
|
using Pixiview.iOS.Renderers.AppShellSection;
|
|
using Pixiview.Utils;
|
|
using UIKit;
|
|
using Xamarin.Forms;
|
|
using Xamarin.Forms.Platform.iOS;
|
|
|
|
[assembly: ExportRenderer(typeof(Shell), typeof(AppShellRenderer))]
|
|
namespace Pixiview.iOS.Renderers
|
|
{
|
|
public class AppShellRenderer : ShellRenderer
|
|
{
|
|
public override bool PrefersHomeIndicatorAutoHidden => Screen.GetHomeIndicatorAutoHidden(Element);
|
|
|
|
protected override IShellSectionRenderer CreateShellSectionRenderer(ShellSection shellSection)
|
|
{
|
|
var renderer = base.CreateShellSectionRenderer(shellSection); // new AppShellSectionRenderer(this);
|
|
if (renderer is ShellSectionRenderer sr && Element is AppShell shell)
|
|
{
|
|
shell.SetNavigationBarHeight(sr.NavigationBar.Frame.Height);
|
|
shell.SetStatusBarHeight(UIApplication.SharedApplication.StatusBarFrame.Height);
|
|
}
|
|
return renderer;
|
|
}
|
|
|
|
protected override IShellItemTransition CreateShellItemTransition()
|
|
{
|
|
return new AppShellItemTransition();
|
|
}
|
|
|
|
protected override IShellTabBarAppearanceTracker CreateTabBarAppearanceTracker()
|
|
{
|
|
return new AppShellTabBarAppearanceTracker((AppShell)Element);
|
|
}
|
|
|
|
protected override IShellNavBarAppearanceTracker CreateNavBarAppearanceTracker()
|
|
{
|
|
return new AppShellNavBarAppearanceTracker();
|
|
}
|
|
|
|
protected override void UpdateBackgroundColor()
|
|
{
|
|
NativeView.BackgroundColor = Color.Transparent.ToUIColor();
|
|
}
|
|
}
|
|
|
|
public class AppShellItemTransition : IShellItemTransition
|
|
{
|
|
[SuppressMessage("Code Notifications", "XI0001:Notifies you with advices on how to use Apple APIs", Justification = "<Pending>")]
|
|
public Task Transition(IShellItemRenderer oldRenderer, IShellItemRenderer newRenderer)
|
|
{
|
|
var task = new TaskCompletionSource<bool>();
|
|
var oldView = oldRenderer.ViewController.View;
|
|
var newView = newRenderer.ViewController.View;
|
|
newView.Alpha = 0;
|
|
|
|
newView.Superview.InsertSubviewAbove(newView, oldView);
|
|
|
|
UIView.Animate(0.2, 0, UIViewAnimationOptions.BeginFromCurrentState, () => newView.Alpha = 1, () => task.TrySetResult(true));
|
|
|
|
return task.Task;
|
|
}
|
|
}
|
|
|
|
public class AppShellSectionRenderer : ShellSectionRenderer
|
|
{
|
|
public AppShellSectionRenderer(IShellContext context) : base(context)
|
|
{
|
|
}
|
|
|
|
protected override IShellSectionRootRenderer CreateShellSectionRootRenderer(ShellSection shellSection, IShellContext shellContext)
|
|
{
|
|
return new AppShellSectionRootRenderer(shellSection, shellContext);
|
|
}
|
|
}
|
|
|
|
public class AppShellSectionRootRenderer : ShellSectionRootRenderer
|
|
{
|
|
public AppShellSectionRootRenderer(ShellSection shellSection, IShellContext shellContext) : base(shellSection, shellContext)
|
|
{
|
|
}
|
|
|
|
protected override IShellSectionRootHeader CreateShellSectionRootHeader(IShellContext shellContext)
|
|
{
|
|
return new AppShellSectionRootHeader(shellContext);
|
|
}
|
|
}
|
|
}
|