我正在构建一个monoTouch-iPad应用程序,因为面向启动界面,我磕磕绊绊。
一个问题是,当应用启动UIDevice.CurrentDevice.Orientation
时,始终会返回Unknown
。您如何确定应用程序的开始方向?我现在找到的所有属性只返回纵向模式,未知或纵向模式的帧大小 - 即使它是横向模式。
我还创建了两个UIViews(一个用于横向,一个用于纵向),现在在UIViewController的WillRotate
方法中更改它们。但是我的代码:
if(toInterfaceOrientation==UIInterfaceOrientation.LandscapeLeft || toInterfaceOrientation==UIInterfaceOrientation.LandscapeRight){
_scrollView.RemoveFromSuperview();
this.View.Add (_scrollViewLandscape);
}else{
_scrollViewLandscape.RemoveFromSuperview();
this.View.Add (_scrollView);
}
旋转屏幕时,产生短暂而丑陋的“闪烁” - 至少在模拟器中是这样。
是否有最佳做法来布置您的观点?我知道ShouldAutorotateToInterfaceOrientation
但是这对我不起作用,因为我做了很多所有者绘制的东西,在自动化时会被破坏(see my other question)。
我真的很感激不使用Interface-Builder的解决方案,因为我现在正在代码中做所有事情。
更新: Short-Descripton我想要实现的目标: AppStart - >知道正确的Framsize(1024,748或768,1004) - >在正确的框架大小中添加我的自定义视图
UPDATE2:简单和基本的代码段
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
Console.WriteLine (this.InterfaceOrientation);
}
返回肖像。即使模拟器处于横向模式。
答案 0 :(得分:3)
public override void ViewDidLoad ()
{
if (this.InterfaceOrientation == UIInterfaceOrientation.Portrait
|| this.InterfaceOrientation == UIInterfaceOrientation.PortraitUpsideDown)
{
// portrait
}
else
{
// landsacpe
}
}
但我真的建议使用View.AutoresizingMask或覆盖LayoutSubviews,两者都使所有过渡非常顺利
更新:使用AutoresizingMask
public override void ViewDidLoad ()
{
UIView view = new CustomView(View.Bounds);
view.AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth;
View.AddSubview(view);
}
更新:覆盖LayoutSubviews
每次尺寸更改时都会调用LayoutSubviews
public class CustomView : UIView
{
public override void LayoutSubviews ()
{
//layout your view with your own logic using the new values of Bounds.Width and Bounds.Height
}
}