51 lines
1.8 KiB
C#
51 lines
1.8 KiB
C#
using System.Threading.Tasks;
|
|
using Pixiview.iOS.Renderers;
|
|
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);
|
|
if (renderer is ShellSectionRenderer sr && Element is AppShell shell)
|
|
{
|
|
shell.SetNavigationBarHeight(
|
|
sr.NavigationBar.Frame.Height,
|
|
UIApplication.SharedApplication.StatusBarFrame.Height);
|
|
}
|
|
return renderer;
|
|
}
|
|
|
|
protected override IShellItemTransition CreateShellItemTransition()
|
|
{
|
|
return new AppShellItemTransition();
|
|
}
|
|
}
|
|
|
|
public class AppShellItemTransition : IShellItemTransition
|
|
{
|
|
[System.Diagnostics.CodeAnalysis.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;
|
|
}
|
|
}
|
|
}
|