nie znaleźć sposób, aby to zrobić od modalnej kontrolera Sam więc stworzyłem klasę i metodę rozszerzenia:
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();
}
}
To jest mniej więcej jak go używać:
this.PresentModalViewController (
new PublishModalViewController (Item, HandlePublishAction)
);
Jest wygodne, że nie muszę wyraźnie określać rozmiaru, ponieważ korzysta on z granic widoku użytkownika root z kreatora interfejsu. Nie jestem pewien, jak zareaguje na autorotację, może potrzebować jakiegoś tuningu. Używam również dwóch metod rozszerzenia tutaj:
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
);
}
I to jest to.
Ciche, genialne ... –
To nie przypomina żadnego kodu iOS, który widziałem. Czy możesz pokazać to bardziej szczegółowo/na przykładzie? – iOSProgrammingIsFun
@iOSProgrammingIsFun To pytanie zawiera znacznik MonoTouch (obecnie oznaczony jako [Xamarin.iOS] (http://xamarin.com/ios)). Jest to platforma do pisania w C# przeciwko API firmy Apple. –