Dan*_*mov 9 uikit xamarin.ios ios uimodalpresentationstyle ios6
我想从底部呈现一个带有动画的自定义大小的模态视图控制器.我可以使用ModalPresentationStyleto 来实现这个动画FormSheet,但它强制我使用默认大小540x620并且我的视图不适合.
如何对位于屏幕中心的任意大小的视图(控制器)执行类似的转换?
我没有找到从模态控制器本身做到这一点的方法,所以我创建了一个类和一个扩展方法:
public class ModalViewController : UIViewController
{
public SizeF OriginalViewSize { get; private set; }
void Initialize ()
{
ModalPresentationStyle = UIModalPresentationStyle.FormSheet;
}
public override void ViewDidLoad ()
{
OriginalViewSize = View.Bounds.Size;
base.ViewDidLoad ();
}
public ModalViewController (IntPtr handle) : base (handle)
{
Initialize ();
}
public ModalViewController (string nibName, NSBundle bundle) : base (nibName, bundle)
{
Initialize ();
}
public ModalViewController () : base ()
{
Initialize ();
}
}
public static class ModalViewControllerExtensions
{
public static void PresentModalViewController (this UIViewController parent, ModalViewController target)
{
parent.PresentViewController (target, true, null);
target.View.Superview.AutoresizingMask = UIViewAutoresizing.FlexibleMargins;
target.View.Superview.Frame = new RectangleF (PointF.Empty, target.OriginalViewSize);
target.View.Superview.Center = UIScreen.MainScreen.Bounds.Center ().Rotate ();
}
}
Run Code Online (Sandbox Code Playgroud)
我的使用方式大致是这样的:
this.PresentModalViewController (
new PublishModalViewController (Item, HandlePublishAction)
);
Run Code Online (Sandbox Code Playgroud)
我不需要显式指定大小,这很方便,因为它使用界面生成器中的根视图的边界。我不确定这对自动旋转有何反应,可能需要一些调整。我在这里还使用了两种扩展方法:
public static PointF Rotate (this PointF pt)
{
return new PointF (pt.Y, pt.X);
}
public static PointF Center (this RectangleF rect)
{
return new PointF (
(rect.Right - rect.Left) / 2.0f,
(rect.Bottom - rect.Top) / 2.0f
);
}
Run Code Online (Sandbox Code Playgroud)
就是这样。
| 归档时间: |
|
| 查看次数: |
8300 次 |
| 最近记录: |