iOS - 多控制器切换(带滑动动画)
主控制器 ,管理控制器 .h文件
//宏
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height#import "MYMainViewController.h"
#import "MYFirstViewController.h"
#import "MYSecondViewController.h"
#import "MYThirdViewController.h"@interface MYMainViewController ()<UIScrollViewDelegate>
//控制器名
@property (nonatomic, strong) NSArray *VcNames;
//选择栏
@property(nonatomic, strong) UIView *clickBar;
//底部容器scrollView
@property (strong, nonatomic) UIScrollView *containerScrollerView;@end
. m 文件
底部scrollView , 用于滑动
@implementation MYMainViewController- (UIScrollView *)containerScrollerView
{if (!_containerScrollerView) {_containerScrollerView = [[UIScrollView alloc]init];_containerScrollerView.pagingEnabled = YES;_containerScrollerView.showsVerticalScrollIndicator = NO;_containerScrollerView.showsHorizontalScrollIndicator = NO;_containerScrollerView.contentSize = CGSizeMake(kScreenWidth *self.VcNames.count,kScreenHeight);_containerScrollerView.backgroundColor = [UIColor whiteColor];_containerScrollerView.delegate = self;}return _containerScrollerView;
}
初始化顶部选择栏
//三个子控制器
- (NSArray *)VcNames
{if (!_VcNames) {_VcNames = @[@"控制器一",@"控制器二",@"控制器三"];}return _VcNames;
}//点击选择栏
- (UIView *)clickBar
{if (!_clickBar) {_clickBar = [[UIView alloc]init];_clickBar.backgroundColor = [UIColor lightGrayColor];CGFloat width = kScreenWidth / 3;CGFloat height = 44;//初始化按钮for (NSInteger index = 0; index < 3; index++) {UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];[button setTitle:self.VcNames[index] forState:UIControlStateNormal];[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];button.frame = (CGRect){width *index,0,width,height};[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];//绑定tag值button.tag = index;[_clickBar addSubview:button];}}return _clickBar;
}
viewDidLoad
- (void)viewDidLoad {[super viewDidLoad];self.edgesForExtendedLayout = 0;//初始化选择栏[self initClickBar];//初始化底部scrollView容器[self initScrollViewContainer];//初始化子控制器[self addChildControllers];}
添加子控制器 , 初始化UI
//按钮选择栏
- (void)initClickBar
{[self.view addSubview:self.clickBar];self.clickBar.frame = (CGRect){0,0,[UIScreen mainScreen].bounds.size.width,44};
}//初始化滑动容器
- (void)initScrollViewContainer
{[self.view addSubview:self.containerScrollerView];self.containerScrollerView.frame = CGRectMake(0,44,kScreenWidth, kScreenHeight );
}//添加子控制器
- (void)addChildControllers
{//为了方便直观 , 在此处设置背景色 (实际开发中,不能在这里设置 , 原因是这里只要调用到了控制器的view属性 , 该控制器将会执行viewDidLoad方法 , 相当于直接一开始就将三个控制器的所有UI和网络请求全加载完了 , 负荷会相当重)MYFirstViewController *firstVc = [[MYFirstViewController alloc]init];firstVc.view.backgroundColor = [UIColor redColor];[self addChildViewController:firstVc];MYSecondViewController *secondVc = [[MYSecondViewController alloc]init];secondVc.view.backgroundColor = [UIColor blueColor];[self addChildViewController:secondVc];MYThirdViewController *thirdVc = [[MYThirdViewController alloc]init];thirdVc.view.backgroundColor = [UIColor yellowColor];[self addChildViewController:thirdVc];//默认展示第一个子控制器[self scrollViewDidEndDecelerating:self.containerScrollerView];
}
按钮点击事件实现 , 代理方法实现
//选择栏按钮点击事件
- (void)buttonClick:(UIButton *)button
{[self.containerScrollerView setContentOffset:CGPointMake(button.tag *kScreenWidth, 0) animated:YES];
}//滑动减速时调用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{//获取contentOffsetCGPoint currentOffset = scrollView.contentOffset;NSInteger page = currentOffset.x / kScreenWidth;//取出对应控制器UIViewController *viewController = self.childViewControllers[page];//添加到scrollView容器// if (![viewController isViewLoaded]) {[self.containerScrollerView addSubview:viewController.view];viewController.view.frame = CGRectMake(page *kScreenWidth, 0,kScreenWidth, kScreenHeight);// }}
目录
效果
iOS - 多控制器切换(带滑动动画)相关推荐
- iOS - 多控制器切换一(巧用tabbarController)
多控制器切换在项目中应用十分广泛 , 市面上的大部分app都能见到其身影 . 首先我认为 , 多控制器的切换 , 应尽量避免一次性加载所有的控制器页面 , 造成内存飙升 , 应尽量满足用到时加载 , ...
- iOS视图控制器转场动画
屏幕左边缘右滑返回,TabBar 滑动切换,你是否喜欢并十分依赖这两个操作,甚至觉得 App 不支持这类操作的话简直反人类?这两个操作在大屏时代极大提升了操作效率,其背后的技术便是今天的主题:视图控制 ...
- jQuery效果:隐藏、显示、切换、滑动、淡入淡出、动画
jQuery效果 隐藏.显示.切换.滑动.淡入淡出.以及动画1.隐藏与显示(改变:display:none;) hide()--隐藏 show()--显示toggle()方法:可以使用它来切换hide ...
- html仿今日头条下拉刷新,小程序 仿今日头条 带滑动切换的文章列表
小程序 仿今日头条 带滑动切换的文章列表 发布时间:2018-07-19 09:41, 浏览次数:353 拿别人仿今日头条的代码做的改版, 首先感谢前辈.其次,这个代码虽然能用,但是js里还是存在一些 ...
- ios标签控制器怎么用_带故事板的iOS标签栏控制器
ios标签控制器怎么用 In this tutorial we'll look into another type of view controller namely Tab Bar Controll ...
- [转]iOS 视图控制器转场详解
转自:http://blog.devtang.com/2016/03/13/iOS-transition-guide/ 前言 屏幕左边缘右滑返回,TabBar 滑动切换,你是否喜欢并十分依赖这两个操作 ...
- 8行代码教你搞定导航控制器全屏滑动返回效果 ————转载
作者:@吖了个峥 前言 此次文章,讲述的是导航控制器全屏滑动返回效果,而且代码量非常少,10行内搞定. 效果如图: 如果喜欢我的文章,可以关注我,也可以来小码哥,了解下我们的iOS培训课程.陆续还会有 ...
- iOS 开发之玩转专场动画
有空了再造个轮子,先放个链接 WWDC 2013 Session笔记 - iOS7中的ViewController切换 几句代码快速集成自定义转场效果+ 全手势驱动 TransitionAnimati ...
- iOS教程:移动终端游戏动画设计的12个原则
在移动设备用户体验设计领域,微妙精致的动画已成为非常重要的设计元素.为任何对象添加动画并不简单,需要观察研究在真实世界中物体是如何在时空中运动的,需要设计者关注细节,并且具有耐心.适当的动画能够提供清 ...
最新文章
- python单词大全-python常用的单词
- Unsupported compiler 'GCC 4.2' selected for architecture 'i386'错误
- Servlet(自己实现的Servlet)细节
- c语言尹宝林答案,c程序设计导引 尹宝林
- android中的SharedPreferences存储
- oracle数据库使用小结
- 30个有助于探索Go编程语言的在线资源
- 机器视觉——光源选型
- 福布斯发布区块链50强 这5家中国公司上榜
- shiro原理及其运行流程介绍
- 7.3万字肝爆Java8新特性,我不信你能看完!(建议收藏)
- 新手学编程的常见困惑
- win10c语言乱码修复方法,大神详解win10系统记事本中文变乱码的处理方案
- 洛谷P3110 [USACO14DEC]驮运Piggy Back
- mysql数据库中的正则表达式_MYSQL中正则表达式检索数据库
- 指导手册05:MapReduce编程入门
- Ubuntu安装NVIDIA 显卡驱动
- 苏宁易购开放平台_前三季度线上规模突破2000亿,苏宁易购三季度盈利7.14亿
- mysql 清除表中的数据 (TRUNCATE )
- matlab carcasonne,米迪运河.ppt