From b8e94316e41eba72d927d5ca7d931b26139ee8ff Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期一, 15 六月 2020 09:12:53 +0800
Subject: [PATCH] 20200612
---
Shared.IOS/UI/UIDrawerLayout.cs | 210 ++++++++++++++++++++++++++++++++++-----------------
1 files changed, 139 insertions(+), 71 deletions(-)
diff --git a/Shared.IOS/UI/UIDrawerLayout.cs b/Shared.IOS/UI/UIDrawerLayout.cs
index f8a23ba..bca0d56 100644
--- a/Shared.IOS/UI/UIDrawerLayout.cs
+++ b/Shared.IOS/UI/UIDrawerLayout.cs
@@ -28,8 +28,19 @@
}
}
+ /// <summary>
+ /// 宸︿晶鑿滃崟View
+ /// </summary>
UIView leftView;
+ /// <summary>
+ /// 涓昏彍鍗昖iew
+ /// </summary>
UIView mainView;
+ /// <summary>
+ /// 钂欏眰閬尅View
+ /// </summary>
+ MyMaskUIView maskUIView;
+
/// <summary>
/// 鏋勯�犲嚱鏁�
@@ -38,31 +49,75 @@
{
mUIDrawerLayout = new MyUIDrawerLayout(this) { };
-
viewGroup = mUIDrawerLayout;
mainView = new UIView();
realViewGroup = mainView;
-
-
viewGroup.AddSubview(realViewGroup);
viewGroup.Layer.MasksToBounds = true;
-
leftView = new UIView();
//new UIView(new CGRect(0, 0, Application.CurrentWidth, Application.CurrentHeight));
- var mFrame = leftView.Frame;
- mFrame.Y = 0;
- mFrame.X = 0;
- mFrame.Width = Application.CurrentWidth;
- mFrame.Height = Application.CurrentHeight;
- mFrame.X = -Application.CurrentWidth;
- leftView.Frame = mFrame;
+ var leftViewFrame = leftView.Frame;
+ leftViewFrame.Y = 0;
+ leftViewFrame.X = 0;
+ leftViewFrame.Width = Application.CurrentWidth;
+ leftViewFrame.Height = Application.CurrentHeight;
+ leftViewFrame.X = -Application.CurrentWidth;
+ leftView.Frame = leftViewFrame;
leftView.BackgroundColor = UIColor.FromRGBA(0, 0, 0, 99);
-
viewGroup.AddSubview(leftView);
+
+ maskUIView = new MyMaskUIView();
+ var maskFrame = maskUIView.Frame;
+ maskFrame.Y = 0;
+ maskFrame.X = 0;
+ maskFrame.Width = Application.CurrentWidth;
+ maskFrame.Height = Application.CurrentHeight;
+ maskUIView.Frame = maskFrame;
+ maskUIView.BackgroundColor = UIColor.FromRGBA(0, 0, 0, 0);
+ viewGroup.AddSubview(maskUIView);
+ }
+
+ /// <summary>
+ /// 鍒锋柊宸iew鏄剧ず鐨勪綅缃�
+ /// </summary>
+ /// <param name="leftFrame">鏈�缁坴iew鐨勪綅缃�</param>
+ /// <param name="needAnimations">鏄惁闇�瑕佸钩绉诲姩鐢�</param>
+ void RefreshLeftViewFrame(CGRect leftFrame, bool needAnimations = true)
+ {
+ //leftView.Frame = leftFrame;
+ //RefreshMaskUIViewBackgroundColor(leftView.Frame.X);
+
+ //2020-06-11 澧炲姞骞崇Щ鍔ㄧ敾
+ if (!needAnimations)
+ {
+ leftView.Frame = leftFrame;
+ RefreshMaskUIViewBackgroundColor(leftView.Frame.X);
+ }
+ else
+ {
+ UIView.BeginAnimations("move");
+ UIView.SetAnimationDuration(0.5);
+ //UIView.SetAnimationDelegate(leftView);
+ leftView.Frame = leftFrame;
+ RefreshMaskUIViewBackgroundColor(leftView.Frame.X);
+ UIView.CommitAnimations();
+
+ }
}
-
+ /// <summary>
+ /// 鍒锋柊钂欏眰View鐨勪綅缃拰閫忔槑搴﹂鑹�
+ /// </summary>
+ /// <param name="leftViewX"></param>
+ void RefreshMaskUIViewBackgroundColor(nfloat leftViewX)
+ {
+ int alpha = 180 + (int)(leftViewX / mUIDrawerLayout.Frame.Size.Width * 180);
+ maskUIView.BackgroundColor = UIColor.FromRGBA(0, 0, 0, alpha);
+ var maskFrame = maskUIView.Frame;
+ maskFrame.X = leftView.Frame.X + leftView.Frame.Width;
+ maskUIView.Frame = maskFrame;
+ }
View leftChildView;
@@ -80,19 +135,9 @@
view.Parent = this;
leftChildView = view;
- //view.X = 0;
- //view.Y = 0;
- //view.Width = Width;
- //view.Height = Height;
-
- //view.Parent = this;
- //view.Refresh();
var addFrame = leftView.Frame;
addFrame.X = 0;
addFrame.Y = 0;
- //addFrame.Height = Height;
- //addFrame.Width = Width;
-
leftChildView.RealView.Frame = addFrame;
leftView.AddSubview(leftChildView.RealView);
@@ -111,32 +156,33 @@
{
leftChildView.RealView.RemoveFromSuperview();
}
+
leftChildView.Parent = null;
}
/// <summary>
/// 鏄惁閿佸畾鍙虫粦鍔熻兘锛� 閿佸畾鍚庡彸婊戝脊鍑鸿彍鍗曞け鏁�
/// </summary>
- bool _IsDrawerLockMode;
+ bool isDrawerLockModei;
public bool IsDrawerLockMode
{
- get鈥� {鈥� return _IsDrawerLockMode;鈥� }
+ get鈥� {鈥� return isDrawerLockModei;鈥� }
set
{
- _IsDrawerLockMode = value;
- mUIDrawerLayout.IsDrawerLockMode = _IsDrawerLockMode;
+ isDrawerLockModei = value;
+ mUIDrawerLayout.IsDrawerLockMode = isDrawerLockModei;
}
}
- bool _IsDrawerOpen = false;
+ bool isDrawerOpen = false;
private bool IsDrawerOpen
{
- get鈥� {鈥� return _IsDrawerOpen;鈥� }
+ get鈥� {鈥� return isDrawerOpen;鈥� }
set
{
- _IsDrawerOpen = value;
- mUIDrawerLayout.IsDrawerOpen = _IsDrawerOpen;
+ isDrawerOpen = value;
+ mUIDrawerLayout.IsDrawerOpen = isDrawerOpen;
}
@@ -147,17 +193,14 @@
/// </summary>
public void OpenLeftMenu()
{
-
if (!IsDrawerOpen)
{
IsDrawerOpen = true;
ShowLeftView(IsDrawerOpen);
- //System.Console.WriteLine("OpenLeftMenu-------");
+ //Shared.HDLUtils.WriteLine("OpenLeftMenu-------");
}
-
+
}
-
-
/// <summary>
/// 鍏抽棴鎶藉眽view
@@ -168,7 +211,7 @@
{
IsDrawerOpen = false;
ShowLeftView(IsDrawerOpen);
- //System.Console.WriteLine("CloseLeftMenu-------");
+ //Shared.HDLUtils.WriteLine("CloseLeftMenu-------");
}
}
@@ -186,8 +229,6 @@
//}
-
-
/// <summary>
/// 鏄惁鎵撳紑鏄剧ず宸﹁竟鑿滃崟view
/// </summary>
@@ -195,30 +236,31 @@
{
var mFrame = leftView.Frame;
mFrame.X = bShow ? 0 : -mUIDrawerLayout.Frame.Size.Width;
- leftView.Frame = mFrame;
+ RefreshLeftViewFrame(mFrame);
}
+
/// <summary>
/// 绉诲姩宸﹁竟view
/// </summary>
- public void MoveLeftView(nfloat XX)
- {
+ public void MoveLeftView(nfloat moveX)
+ {
if (IsDrawerOpen)
{
- if (XX < 0)
+ if (moveX < 0)
{
var mFrame = leftView.Frame;
- mFrame.X = 0 + XX;
- leftView.Frame = mFrame;
+ mFrame.X = 0 + moveX;
+ RefreshLeftViewFrame(mFrame,false);
}
}
else
{
- if(XX > 0)
+ if (moveX > 0)
{
var mFrame = leftView.Frame;
- mFrame.X = -mUIDrawerLayout.Frame.Size.Width + XX;
- leftView.Frame = mFrame;
+ mFrame.X = -mUIDrawerLayout.Frame.Size.Width + moveX;
+ RefreshLeftViewFrame(mFrame,false);
}
}
@@ -235,15 +277,15 @@
if (IsDrawerOpen)
{
mFrame.X = 0;
- //System.Console.WriteLine($"Reset Open");
+ //Shared.HDLUtils.WriteLine($"Reset Open");
}
else
{
mFrame.X = -mUIDrawerLayout.Frame.Size.Width;
- //System.Console.WriteLine($"Reset CLOSE");
+ //Shared.HDLUtils.WriteLine($"Reset CLOSE");
}
- leftView.Frame = mFrame;
+ RefreshLeftViewFrame(mFrame);
}
@@ -252,7 +294,7 @@
private void MYTouchEvent(EventActions eventAction, CGPoint point)
{
- if (_IsDrawerLockMode) return;
+ if (isDrawerLockModei) return;
switch (eventAction)
{
@@ -261,25 +303,23 @@
//璁板綍鐐瑰嚮鐨勬渶鏂癤鍧愭爣
mLastX = point.X;
mLastY = point.Y;
- //System.Console.WriteLine($"DrawerLayout:EventActions.Down XXX{mLastX}");
+ //Shared.HDLUtils.WriteLine($"DrawerLayout:EventActions.Down XXX{mLastX}");
break;
case EventActions.Move:
moveWithPoint(point);
- //System.Console.WriteLine("DrawerLayout:EventActions.Move");
+ //Shared.HDLUtils.WriteLine("DrawerLayout:EventActions.Move");
break;
case EventActions.Up:
- //System.Console.WriteLine($"DrawerLayout:EventActions.Down deltaX{deltaX} WWW:{mUIDrawerLayout.Frame.Size.Width} ");
+ //Shared.HDLUtils.WriteLine($"DrawerLayout:EventActions.Down deltaX{deltaX} WWW:{mUIDrawerLayout.Frame.Size.Width} ");
if (Math.Abs(deltaX) >= mUIDrawerLayout.Frame.Size.Width / 2)
{
if (deltaX > 0)
{
- //System.Console.WriteLine("DrawerOpen");
IsDrawerOpen = true;
ShowLeftView(IsDrawerOpen);
}
else
{
- //System.Console.WriteLine("Drawer CLOSE");
IsDrawerOpen = false;
ShowLeftView(IsDrawerOpen);
}
@@ -289,7 +329,6 @@
ResetView();
}
- //System.Console.WriteLine("DrawerLayout:EventActions.Up");
break;
}
@@ -313,12 +352,7 @@
if (mLastX < 10)
{
MoveLeftView(deltaX);
- //浠庡睆骞曞乏渚у紑濮嬫粦鍔紝鎵嶈Е鍙�
- //MoveAction?.Invoke(deltaX);
-
}
-
-
}
}
@@ -339,8 +373,6 @@
public MyUIDrawerLayout(UIDrawerLayout mUIDrawerLayout)
{
this.mUIDrawerLayout = mUIDrawerLayout;
-
-
}
@@ -351,6 +383,8 @@
public override UIView HitTest(CGPoint point, UIEvent uievent)
{
+ //Shared.HDLUtils.WriteLine($"MyUIDrawerLayout:HitTest{point.X} uievent{uievent.ToString()}");
+
if (!IsDrawerLockMode)//涓嶉攣瀹氾紝鍏佽鍙虫粦
{
if (PointInside(point, uievent))
@@ -359,7 +393,7 @@
{
if (point.X > this.Frame.Size.Width - 10)
{
- //System.Console.WriteLine($"MyUIDrawerLayout:HitTest{point.X} uievent{uievent.ToString()}");
+ //Shared.HDLUtils.WriteLine($"MyUIDrawerLayout:HitTest{point.X} uievent{uievent.ToString()}");
return this;//鎷︽埅
}
@@ -368,8 +402,8 @@
{
if (point.X < 10)
{
- //System.Console.WriteLine($"MyUIDrawerLayout:HitTest{point.X} uievent{uievent.ToString()}");
- return this; return this;//鎷︽埅
+ //Shared.HDLUtils.WriteLine($"MyUIDrawerLayout:HitTest{point.X} uievent{uievent.ToString()}");
+ return this;
}
}
@@ -377,6 +411,17 @@
}
return base.HitTest(point, uievent);//涓嶆嫤鎴�
+
+ //UIView viewReturn = base.HitTest(point, uievent);
+ //if (viewReturn is MyUIDrawerLayout)
+ //{
+ // return base.HitTest(point, uievent);//涓嶆嫤鎴�
+ //}
+ //else {
+
+
+ // return base.HitTest(point, uievent);//涓嶆嫤鎴�
+ //}
}
@@ -387,10 +432,10 @@
/// <param name="evt">Evt.</param>
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
- //System.Console.WriteLine("MyUIDrawerLayout:TouchesBegan");
+ //Shared.HDLUtils.WriteLine("MyUIDrawerLayout:TouchesBegan");
mUIDrawerLayout?.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this));
mUIDrawerLayout?.MYTouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this));
-
+
}
/// <summary>
/// 绉诲姩
@@ -412,7 +457,7 @@
{
mUIDrawerLayout?.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this));
mUIDrawerLayout?.MYTouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this));
- //System.Console.WriteLine("MyUIDrawerLayout:TouchesEnded");
+ //Shared.HDLUtils.WriteLine("MyUIDrawerLayout:TouchesEnded");
}
public override void TouchesCancelled(NSSet touches, UIEvent evt)
@@ -432,9 +477,32 @@
}
base.AddSubview(view);
}
+ }
+
+ /// <summary>
+ /// 钂欏眰View
+ /// </summary>
+ class MyMaskUIView : UIView
+ {
+ public MyMaskUIView()
+ {
+
+
+
+ }
+
+ /// <summary>
+ /// 瀵绘壘鏈�閫傚悎鐨刅iew
+ /// 瀹炵幇鎷︽埅
+ /// </summary>
+ public override UIView HitTest(CGPoint point, UIEvent uievent)
+ {
+ return null;
+ }
}
+
}
}
\ No newline at end of file
--
Gitblit v1.8.0