sixth-多视图应用
Posted sziit_jerry
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sixth-多视图应用相关的知识,希望对你有一定的参考价值。
sixth-多视图应用
多视图应用的常见类型
- 实用工具应用:音乐播放器、通讯录等
- 基于导航的应用:手机设置
- 工具栏:按钮间不冲突
- 标签栏:一次只能选其一
多视图应用的体系结构
- 启动时自加载蓝色视图界面,底部有工具栏,中间有按钮
- 点击工具栏按钮,动画切换视图变成黄色
- 按下中间按钮会弹出警告框
根控制器
- 负责管理当前向用户显示哪个视图。是UINavigationController或UITabBarController的一个实例
- 也可以是UIViewController的一个子类
- 容器视图控制器
内容视图
- 每个视图控制器控制一个内容视图,它们一起组成的组合在storyboard中被称为场景
- 一般都会使用界面构建场景,这种方式省时且易于维护
构建View Switcher项目
- 重命名视图控制器
- 进入声明文件,点击视图控制器的位置Refactor -> Rename
- Xcode快照功能Snapshot
- 添加内容视图控制器(2个类)
- 添加视图控制器属性声明
- 创建拥有工具栏视图Toolbar并固定它
- 链接工具栏按钮和视图控制器(文档略图中从按钮位置向上拖线到视图控制器,选择方法,或crl+opt+cmd+6相关连线)
- 编写视图控制器
- 启动自加载
- 延迟加载
- 实现内容视图
- 转场过程的动画效果
其他
- 添加其他场景时要记得修改场景所继承的父类
- Constrain to margins不勾选则是跟边缘的距离,勾选则是跟边缘蓝色引线的距离
- Pin里最下Update Frames : Item of New Constraints 更新新创建的约束
代码
#import "SwitchingViewController.h"
#import "YellowViewController.h"
#import "BlueViewController.h"
#pragma mark 私有声明
@interface SwitchingViewController ()
/** 黄色视图控制器 */
@property (strong, nonatomic) YellowViewController *yellowViewController;
/** 蓝色视图控制器 */
@property (strong, nonatomic) BlueViewController *blueViewController;
@end
#pragma mark 实现
@implementation SwitchingViewController
#pragma mark 启动自加载
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 创建蓝视图控制器的实例,并设置标识符“Blue”
self.blueViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Blue"];
// 标明蓝视图控制器对象中视图的位置以及大小
self.blueViewController.view.frame = self.view.frame;
// 一启动就切换到蓝色视图
[self switchViewFromViewController:nil toViewController:self.blueViewController];
#pragma mark 切换视图
- (IBAction)switchView:(id)sender
/** 判断要切换的视图,如果没有就创建 */
if (!self.yellowViewController.view.superview)
if (!self.yellowViewController)
self.yellowViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Yellow"];
else
if (!self.blueViewController)
self.blueViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Blue"];
/** 切换视图控制器 */
// 声明一个动画块
[UIView beginAnimations:@"View Flip" context:NULL];
// 动画持续时间
[UIView setAnimationDuration:2];
// 动画曲线:决定了动画的运行速度,此处开始缓慢中间加速然后再缓慢停止
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
/* 动画效果:
1. FlipFromRight :从右向上翻
2. FlipFromLeft :从左向上翻
3. CurlUp :右下角向上翻
4. CurDown:左上角向下翻
5. None:没效果
**/
if (!self.yellowViewController.view.superview)
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
self.yellowViewController.view.frame = self.view.frame;
[self switchViewFromViewController:self.blueViewController toViewController:self.yellowViewController];
else
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
self.blueViewController.view.frame = self.view.frame;
[self switchViewFromViewController:self.yellowViewController toViewController:self.blueViewController];
[UIView commitAnimations];
#pragma mark 切换视图控制器
- (void)switchViewFromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC
/** 移除当前显示的视图控制器中的视图 */
if (fromVC != nil)
// 即将被移出当前控制器
[fromVC willMoveToParentViewController:nil];
// 当前子控制器视图从父视图中移出
[fromVC.view removeFromSuperview];
// 子控制器从父控制器中移出
[fromVC removeFromParentViewController];
/** 添加新视图控制器的视图 */
if (toVC != nil)
// 把视图控制器添加为容器视图控制器的子控件
[self addChildViewController:toVC];
// 将子视图控制器的视图添加到容器视图控制器视图中,索引值为0表示把它放在最底层
[self.view insertSubview:toVC.view atIndex:0];
// 通知即将到来的控制器,它已经被作为子控制器添加到其他控制器下
[toVC didMoveToParentViewController:self];
@end
以上是关于sixth-多视图应用的主要内容,如果未能解决你的问题,请参考以下文章