@@ -14,6 +14,7 @@ public class PopoverViewController(IMauiContext mauiContext) : UIViewController
1414{
1515 private readonly IMauiContext mauiContext = mauiContext ?? throw new ArgumentNullException ( nameof ( mauiContext ) ) ;
1616 private Grid contentWrapper = null ;
17+ private bool isAnimated = true ;
1718 private WeakReference < IPopover > virtualViewReference ;
1819
1920 internal UIViewController ViewController { get ; private set ; }
@@ -31,6 +32,17 @@ public virtual UIPopoverArrowDirection PermittedArrowDirections
3132 set => ( ( UIPopoverPresentationController ) PresentationController ) . PermittedArrowDirections = value ;
3233 }
3334
35+ public virtual bool IsAnimated
36+ {
37+ get => isAnimated ;
38+ set
39+ {
40+ isAnimated = value ;
41+ if ( PresentationController . Delegate is PopoverDelegate popoverDelegate )
42+ popoverDelegate . IsAnimated = value ;
43+ }
44+ }
45+
3446
3547 public override void ViewWillAppear ( bool animated )
3648 {
@@ -45,7 +57,8 @@ public override void ViewWillAppear(bool animated)
4557 View . Superview . Layer . CornerRadius = 0f ;
4658 View . Superview . Layer . MasksToBounds = false ;
4759
48- AnimateIn ( ) ;
60+ if ( IsAnimated )
61+ AnimateIn ( ) ;
4962 }
5063 }
5164
@@ -84,7 +97,7 @@ public void SetElement(IPopover element)
8497 }
8598
8699 [ MemberNotNull ( nameof ( ViewController ) ) ]
87- public void Show ( in IPopover virtualView , in IElement anchor )
100+ public async Task Show ( IPopover virtualView , IElement anchor )
88101 {
89102 if ( IsBeingPresented || IsBeingDismissed )
90103 return ;
@@ -95,7 +108,12 @@ public void Show(in IPopover virtualView, in IElement anchor)
95108 _ = ViewController ?? throw new InvalidOperationException ( $ "{ nameof ( ViewController ) } cannot be null") ;
96109
97110 SetAnchor ( virtualView , anchor ) ;
98- PresentInViewController ( ViewController ) ;
111+ await PresentInViewController ( ViewController ) ;
112+ }
113+
114+ public async Task Hide ( )
115+ {
116+ await ViewController . DismissViewControllerAsync ( IsAnimated ) ;
99117 }
100118
101119 public void CleanUp ( )
@@ -187,8 +205,11 @@ private void SetAnchor(IPopover popover, IElement anchor)
187205 private void SetUpPresentationController ( IPopover virtualView )
188206 {
189207 var presentationController = ( UIPopoverPresentationController ) PresentationController ;
190-
191- presentationController . Delegate = new PopoverDelegate ( ) ;
208+
209+ presentationController . Delegate = new PopoverDelegate
210+ {
211+ IsAnimated = IsAnimated
212+ } ;
192213 presentationController . PermittedArrowDirections = virtualView . PermittedArrowDirections . ToUIPopoverArrowDirection ( ) ;
193214
194215 if ( ! virtualView . UseDefaultStyling )
@@ -198,9 +219,9 @@ private void SetUpPresentationController(IPopover virtualView)
198219 }
199220 }
200221
201- private void PresentInViewController ( UIViewController viewController )
222+ private async Task PresentInViewController ( UIViewController viewController )
202223 {
203- viewController . PresentViewController ( this , true , null ) ;
224+ await viewController . PresentViewControllerAsync ( this , IsAnimated ) ;
204225 }
205226
206227 private CGPoint GetContentOffset ( bool useDefaultStyling )
@@ -233,6 +254,14 @@ private static void RemoveShadow(UIView containerView)
233254
234255 private class PopoverDelegate : UIPopoverPresentationControllerDelegate
235256 {
257+ public bool IsAnimated { get ; set ; } = true ;
258+
259+ public override bool ShouldDismiss ( UIPresentationController presentationController )
260+ {
261+ presentationController . PresentingViewController . DismissViewController ( IsAnimated , null ) ;
262+ return true ;
263+ }
264+
236265 public override UIModalPresentationStyle GetAdaptivePresentationStyle ( UIPresentationController forPresentationController ) =>
237266 UIModalPresentationStyle . None ;
238267
0 commit comments