我想用一些共享代码为不同的“模式”制作一个具有不同视图的应用程序(有些元素我想要总是相同的,并且背景会在不同的视图之间发生变化)。我将根据时间管理这些视图之间的转换。布局视图的最佳方式是什么?
我看着做一个标签视图,但它似乎有点不自然,因为标签栏不容易隐藏。我也可以做一个自定义容器(我最初的想法),但如果可能的话,留在“标准”iOS 视图中似乎会很好。
进行自定义视图是否听起来不错/我错过了更好的方法吗?
我想用一些共享代码为不同的“模式”制作一个具有不同视图的应用程序(有些元素我想要总是相同的,并且背景会在不同的视图之间发生变化)。我将根据时间管理这些视图之间的转换。布局视图的最佳方式是什么?
我看着做一个标签视图,但它似乎有点不自然,因为标签栏不容易隐藏。我也可以做一个自定义容器(我最初的想法),但如果可能的话,留在“标准”iOS 视图中似乎会很好。
进行自定义视图是否听起来不错/我错过了更好的方法吗?
我将有 2 个版本-layoutSubviews
的父视图。就像是:
-(void)layoutSubviews
{
if ( self.mode == 0 )
{
[ self layoutMode0 ] ;
}
else if ( self.mode == 1 )
{
[ self layoutMode1 ] ;
}
}
您的布局代码还可以显示/隐藏某些视图或设置背景图像等。在您切换模式的代码中,调用-setNeedsLayout
...这样的东西:
-(void)setMode:(enum Modes)newMode
{
_mode = newMode ;
[ self setNeedsLayout ] ;
}
如果您希望模式切换为动画,您可以执行以下操作:
-(void)setMode:(enum Mode)newMode animated:(BOOL)animated
{
_mode = newMode ;
if ( animated )
{
[ UIView animateWithDuration:0.25 animations:^{
[ self layoutSubviews ] ;
} ]
}
else
{
[ self setNeedsLayout ] ;
}
}
你的普通二传手-setMode:
看起来像这样:
-(void)setMode:(enum Mode)newMode
{
[ self setMode:newMode animated:NO ] ;
}
如果您的模式是基于堆栈的,您也可以考虑使用 UINavigationController。导航栏可以很容易地隐藏(设置hidesNavigationBar
为 YES)。当您推动或弹出与您可能想要设置animated
为 NO 的模式相对应的控制器时,除非滑入/滑出动画适合您。