看到以下Dribbble截图后,我觉得这可能是iOS7中滑动视图控制器最好的解决方案。
SCSlidingViewController允许您设置一个(或两个)视图控制器在iOS7中占据完整高度,以便控制状态栏后面的颜色,而顶部视图则位于状态栏下方,类似于iOS6。
在您的 RootViewController.m
中,执行以下操作以实例化左侧和右侧(两者均可省略)。
#import "RootViewController.h"
#import "TopViewController.h"
#import "MenuViewController.h"
@interface RootViewController () <SCSlidingViewControllerDelegate>
@end
@implementation RootViewController
- (void)viewDidLoad
{
// Initial view controller, setup the views to be used.
[super viewDidLoad];
self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Top"];
self.leftSideViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];
self.rightSideViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Context"];
}
@end
在您的 RootViewController.h
文件中,确保您已从SCSlidingViewController继承
#import <UIKit/UIKit.h>
#import "SCSlidingViewController.h"
@interface RootViewController : SCSlidingViewController
@end
从您的任何其他视图控制器,当您想要更改顶部分 controller 时,只需调用
[self.slidingViewController changeTopViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"YOUR VIEW CONTROLLER NAME"]];
以下内容已公开(并且在功能上应该是直接的)。
@property (nonatomic) BOOL allowOverswipe;
@property (nonatomic) int topViewOffsetY;
@property (nonatomic) int peakAmount;
@property (nonatomic) CGFloat peakThreshold;
@property (nonatomic) CGFloat cornerRadius;
@property (nonatomic) CGFloat shadowOpacity;
@property (nonatomic) CGFloat shadowOffsetX;
@property (nonatomic) CGFloat shadowOffsetY;
@property (retain, nonatomic) UIColor *shadowColor;
@property (nonatomic) CGFloat animationDuration;
peakThreshold
会影响打开侧边的拖动手势。如果视图控制器被拖动的量超过窗口框架宽度的百分比减去在峰值时的可见数量,则视图控制器将显示,否则顶部分controller将快速回到原始位置。
allowOverswipe
防止在拖动时显示不可见的侧面视图控制器。
以下事件在更改顶部分 controller 时被调用(但是不是通过 self.topViewController 修改来触发的)。
- (void)willChangeTopViewController;
- (void)didChangeTopViewController;