* Pixiview/UI/CircleUIs.cs:
* Pixiview.iOS/Pixiview.iOS.csproj: * Pixiview.iOS/Renderers/RoundLabelRenderer.cs: * Pixiview.iOS/Renderers/CircleImageRenderer.cs: custom round corner controls * Pixiview/App.xaml: * Pixiview/Utils/Converters.cs: * Pixiview/GlobalSuppressions.cs: * Pixiview/UI/StyleDefinition.cs: * Pixiview/UI/AdaptedPage.cs: * Pixiview.iOS/Renderers/AdaptedPageRenderer.cs: observe orientation * Pixiview/MainPage.xaml: * Pixiview/Utils/Stores.cs: * Pixiview/MainPage.xaml.cs: * Pixiview/Utils/IllustData.cs: data and UI adjust
This commit is contained in:
@ -1,4 +1,5 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Foundation;
|
||||
using Pixiview.iOS.Renderers;
|
||||
using Pixiview.UI;
|
||||
using Pixiview.Utils;
|
||||
@ -11,6 +12,9 @@ namespace Pixiview.iOS.Renderers
|
||||
{
|
||||
public class AdaptedPageRenderer : PageRenderer
|
||||
{
|
||||
UIDeviceOrientation lastOrientation;
|
||||
NSObject observer;
|
||||
|
||||
public override void ViewDidLoad()
|
||||
{
|
||||
base.ViewDidLoad();
|
||||
@ -30,6 +34,20 @@ namespace Pixiview.iOS.Renderers
|
||||
{
|
||||
SetStatusBarStyle(style);
|
||||
}
|
||||
|
||||
observer = UIDevice.Notifications.ObserveOrientationDidChange(ChangeOrientation);
|
||||
ChangeOrientation(null, null);
|
||||
}
|
||||
|
||||
public override void ViewWillDisappear(bool animated)
|
||||
{
|
||||
if (observer != null)
|
||||
{
|
||||
observer.Dispose();
|
||||
observer = null;
|
||||
}
|
||||
|
||||
base.ViewWillDisappear(animated);
|
||||
}
|
||||
|
||||
private void SetStatusBarStyle(UIStatusBarStyle style)
|
||||
@ -64,5 +82,23 @@ namespace Pixiview.iOS.Renderers
|
||||
return UIStatusBarStyle.Default;
|
||||
}
|
||||
}
|
||||
|
||||
void ChangeOrientation(object sender, NSNotificationEventArgs e)
|
||||
{
|
||||
var current = UIDevice.CurrentDevice.Orientation;
|
||||
if (current == UIDeviceOrientation.FaceUp || current == UIDeviceOrientation.FaceDown)
|
||||
{
|
||||
//current = UIDeviceOrientation.Portrait;
|
||||
return;
|
||||
}
|
||||
if (lastOrientation != current)
|
||||
{
|
||||
lastOrientation = current;
|
||||
if (Element is AdaptedPage page)
|
||||
{
|
||||
page.OnOrientationChanged((Orientation)lastOrientation);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
31
Pixiview.iOS/Renderers/CircleImageRenderer.cs
Normal file
31
Pixiview.iOS/Renderers/CircleImageRenderer.cs
Normal file
@ -0,0 +1,31 @@
|
||||
using Pixiview.iOS.Renderers;
|
||||
using Pixiview.UI;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Platform.iOS;
|
||||
|
||||
[assembly: ExportRenderer(typeof(CircleImage), typeof(CircleImageRenderer))]
|
||||
namespace Pixiview.iOS.Renderers
|
||||
{
|
||||
public class CircleImageRenderer : ImageRenderer
|
||||
{
|
||||
protected override void OnElementChanged(ElementChangedEventArgs<Image> e)
|
||||
{
|
||||
base.OnElementChanged(e);
|
||||
|
||||
if (Control != null)
|
||||
{
|
||||
Control.Layer.MasksToBounds = true;
|
||||
}
|
||||
}
|
||||
|
||||
public override void LayoutSubviews()
|
||||
{
|
||||
base.LayoutSubviews();
|
||||
|
||||
if (Control != null)
|
||||
{
|
||||
Control.Layer.CornerRadius = Control.Frame.Size.Width / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
47
Pixiview.iOS/Renderers/RoundLabelRenderer.cs
Normal file
47
Pixiview.iOS/Renderers/RoundLabelRenderer.cs
Normal file
@ -0,0 +1,47 @@
|
||||
using System.ComponentModel;
|
||||
using Pixiview.iOS.Renderers;
|
||||
using Pixiview.UI;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Platform.iOS;
|
||||
|
||||
[assembly: ExportRenderer(typeof(RoundLabel), typeof(RoundLabelRenderer))]
|
||||
namespace Pixiview.iOS.Renderers
|
||||
{
|
||||
public class RoundLabelRenderer : LabelRenderer
|
||||
{
|
||||
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
|
||||
{
|
||||
base.OnElementChanged(e);
|
||||
|
||||
if (Control != null && Element is RoundLabel label)
|
||||
{
|
||||
int radius = label.CornerRadius;
|
||||
if (radius > 0)
|
||||
{
|
||||
Control.Layer.CornerRadius = radius;
|
||||
Control.BackgroundColor = label.BackgroundColor.ToUIColor();
|
||||
Control.Layer.MasksToBounds = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
base.OnElementPropertyChanged(sender, e);
|
||||
|
||||
if (e.PropertyName == RoundLabel.CornerRadiusProperty.PropertyName)
|
||||
{
|
||||
if (Control != null && Element is RoundLabel label)
|
||||
{
|
||||
int radius = label.CornerRadius;
|
||||
if (radius > 0)
|
||||
{
|
||||
Control.Layer.CornerRadius = radius;
|
||||
Control.BackgroundColor = label.BackgroundColor.ToUIColor();
|
||||
Control.Layer.MasksToBounds = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user