专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
根据屏幕方向设置master控制器宽度
在
CZSplitViewController
的prepareSplitViewController
方法里面根据当前屏幕方向设置master
控制器的宽度#pragma mark - 设置 UISplitViewController /// 设置master 控制器横竖屏显示以及宽度 - (void)prepareSplitViewController { // 1. 一直显示master控制器 self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible; // 2. 获取屏幕方向 BOOL isLandscape = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation); // 3. 设置master控制器的宽度 if (isLandscape) { self.maximumPrimaryColumnWidth = 280; } else { self.maximumPrimaryColumnWidth = 60; } }
- 目前当程序运行的时候
横屏
时master
的宽度为280
,竖屏
时master
的宽度为60
但是屏幕旋转的时候,宽度是不会发生变化的,需要监听屏幕改变事件,当屏幕发生改变时,重新设置
master
的宽度.在
AppDelegate
中实现application:willChangeStatusBarOrientation:duration:
代理方法:/** * 屏幕将要旋转 * @param newStatusBarOrientation 旋转后的屏幕方向 * @param duration 动画时间 */ - (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration { // 1. 判断当前window的根控制器是否是CZSplitViewController // 2. 获取到CZSplitViewController // 3. 设置 master 的宽度 }
实现
application:willChangeStatusBarOrientation:duration:
方法/** * 屏幕将要旋转 * @param newStatusBarOrientation 旋转后的屏幕方向 * @param duration 动画时间 */ - (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration { // 1. 判断当前window的根控制器是否是CZSplitViewController if (![self.window.rootViewController isKindOfClass:[UISplitViewController class]]) { return; } // 2. 获取到CZSplitViewController CZSplitViewController *splitVC = (CZSplitViewController *)self.window.rootViewController; // 3. 设置 master 的宽度 }
在
CZSplitViewController.m
抽取设置master控制器的宽度
setPrimaryColumnWidthWithOrientation:
/** * 根据屏幕方向设置master的宽度 * @param orientation 屏幕方向 */ - (void)setPrimaryColumnWidthWithOrientation:(UIInterfaceOrientation)orientation { BOOL isLandscape = UIInterfaceOrientationIsLandscape(orientation); // 设置master控制器的宽度 if (isLandscape) { self.maximumPrimaryColumnWidth = 280; } else { self.maximumPrimaryColumnWidth = 60; } }
在
CZSplitViewController.h
中声明根据屏幕方向设置master的宽度
方法- (void)setPrimaryColumnWidthWithOrientation:(UIInterfaceOrientation)orientation;
@interface CZSplitViewController : UISplitViewController /// 根据屏幕方向设置master的宽度 - (void)setPrimaryColumnWidthWithOrientation:(UIInterfaceOrientation)orientation; @end
修改
CZSplitViewController.m
的prepareSplitViewController
方法/// 设置master 控制器横竖屏显示以及宽度 - (void)prepareSplitViewController { // 1. 一直显示master控制器 self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible; // 2. 设置master控制器的宽度 [self setPrimaryColumnWidthWithOrientation:[UIApplication sharedApplication].statusBarOrientation]; }
完善
AppDelegate
的application:willChangeStatusBarOrientation:duration:
/** * 屏幕将要旋转 * @param newStatusBarOrientation 旋转后的屏幕方向 * @param duration 动画时间 */ - (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration { // 1. 判断当前window的根控制器是否是CZSplitViewController if (![self.window.rootViewController isKindOfClass:[UISplitViewController class]]) { return; } // 2. 获取到CZSplitViewController CZSplitViewController * splitVC = (CZSplitViewController *)self.window.rootViewController; // 3. 设置 master 的宽度 [splitVC setPrimaryColumnWidthWithOrientation:newStatusBarOrientation]; }