From fb7f7a25d33e3dfdfb07d26b7590f2af67d018ef Mon Sep 17 00:00:00 2001 From: Shane Neuville Date: Wed, 24 Apr 2019 18:36:19 -0600 Subject: [PATCH] Shell hamburger (#5961) * Draw the hamburger if the user hasn't supplied an icon * move variable * remove excess code * remove public --- Xamarin.Forms.Platform.Android/PickerManager.cs | 2 - .../Renderers/ShellPageRendererTracker.cs | 50 +++++++++++++++++++-- Xamarin.Forms.Platform.iOS/Resources/3bar.png | Bin 205 -> 0 bytes Xamarin.Forms.Platform.iOS/Resources/3bar@2x.png | Bin 263 -> 0 bytes .../Xamarin.Forms.Platform.iOS.csproj | 6 --- 5 files changed, 47 insertions(+), 11 deletions(-) delete mode 100644 Xamarin.Forms.Platform.iOS/Resources/3bar.png delete mode 100644 Xamarin.Forms.Platform.iOS/Resources/3bar@2x.png diff --git a/Xamarin.Forms.Platform.Android/PickerManager.cs b/Xamarin.Forms.Platform.Android/PickerManager.cs index 52fcd99..d200513 100644 --- a/Xamarin.Forms.Platform.Android/PickerManager.cs +++ b/Xamarin.Forms.Platform.Android/PickerManager.cs @@ -79,8 +79,6 @@ namespace Xamarin.Forms.Platform.Android renderer1.OnClick(); else if (picker?.Parent?.Parent?.Parent is IPickerRenderer renderer2) renderer2.OnClick(); - else - throw new System.Exception("Renderer not found temp check for Shane things"); } } } diff --git a/Xamarin.Forms.Platform.iOS/Renderers/ShellPageRendererTracker.cs b/Xamarin.Forms.Platform.iOS/Renderers/ShellPageRendererTracker.cs index e5589d6..71befeb 100644 --- a/Xamarin.Forms.Platform.iOS/Renderers/ShellPageRendererTracker.cs +++ b/Xamarin.Forms.Platform.iOS/Renderers/ShellPageRendererTracker.cs @@ -1,4 +1,5 @@ using CoreGraphics; +using Foundation; using System; using System.Collections.Generic; using System.Collections.Specialized; @@ -54,6 +55,7 @@ namespace Xamarin.Forms.Platform.iOS UISearchController _searchController; SearchHandler _searchHandler; Page _page; + NSCache _nSCache; BackButtonBehavior BackButtonBehavior { get; set; } UINavigationItem NavigationItem { get; set; } @@ -61,6 +63,7 @@ namespace Xamarin.Forms.Platform.iOS public ShellPageRendererTracker(IShellContext context) { _context = context; + _nSCache = new NSCache(); } public async void OnFlyoutBehaviorChanged(FlyoutBehavior behavior) @@ -247,14 +250,55 @@ namespace Xamarin.Forms.Platform.iOS } item = item?.Parent; } - if (image == null) - image = "3bar.png"; - var icon = await image.GetNativeImageAsync(); + + UIImage icon = null; + + if (image != null) + icon = await image.GetNativeImageAsync(); + else + icon = DrawHamburger(); + + var barButtonItem = new UIBarButtonItem(icon, UIBarButtonItemStyle.Plain, OnMenuButtonPressed); + barButtonItem.AccessibilityIdentifier = "OK"; NavigationItem.LeftBarButtonItem = barButtonItem; } + UIImage DrawHamburger() + { + const string hamburgerKey = "Hamburger"; + UIImage img = (UIImage)_nSCache.ObjectForKey((NSString)hamburgerKey); + + if (img != null) + return img; + + var rect = new CGRect(0, 0, 23f, 23f); + + UIGraphics.BeginImageContextWithOptions(rect.Size, false, 0); + var ctx = UIGraphics.GetCurrentContext(); + ctx.SaveState(); + ctx.SetStrokeColor(UIColor.Blue.CGColor); + + float size = 3f; + float start = 4f; + ctx.SetLineWidth(size); + + for(int i = 0; i< 3; i++) + { + ctx.MoveTo(1f, start + i * (size * 2)); + ctx.AddLineToPoint(22f, start + i * (size * 2)); + ctx.StrokePath(); + } + + ctx.RestoreState(); + img = UIGraphics.GetImageFromCurrentImageContext(); + UIGraphics.EndImageContext(); + + _nSCache.SetObjectforKey(img, (NSString)hamburgerKey); + return img; + } + void OnMenuButtonPressed(object sender, EventArgs e) { _context.Shell.SetValueFromRenderer(Shell.FlyoutIsPresentedProperty, true); diff --git a/Xamarin.Forms.Platform.iOS/Resources/3bar.png b/Xamarin.Forms.Platform.iOS/Resources/3bar.png deleted file mode 100644 index 50d67714e9634c535f71c813221d05a432cbaf8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^;vmey1|%P7U0DF67>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h7I;J!GcfQS24TkI`72U@f|4b!5hcO-X(i=}MX3x0iJ5sNdU>fO3MP66 zdPasH6*8v+71?^aIEHw5zdd8f#bChU9QeNe!lvI6;>1s;*b3=DjSL74G){)!Z!pk#?_L`iUdT1k0gQ7S`0VrE{6US4X6f{C7i zo{`~4h0LiyMdh9@jv*P&Z_gQWu^95O9Q^x#c`e&=*>3HC0HG3-` - - - @@ -266,8 +263,5 @@ Properties\GlobalAssemblyInfo.cs - - - \ No newline at end of file -- 2.7.4