主控制器 ,管理控制器 .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 - 多控制器切换(带滑动动画)相关推荐

  1. iOS - 多控制器切换一(巧用tabbarController)

    多控制器切换在项目中应用十分广泛 , 市面上的大部分app都能见到其身影 . 首先我认为 , 多控制器的切换 , 应尽量避免一次性加载所有的控制器页面 , 造成内存飙升 , 应尽量满足用到时加载 , ...

  2. iOS视图控制器转场动画

    屏幕左边缘右滑返回,TabBar 滑动切换,你是否喜欢并十分依赖这两个操作,甚至觉得 App 不支持这类操作的话简直反人类?这两个操作在大屏时代极大提升了操作效率,其背后的技术便是今天的主题:视图控制 ...

  3. jQuery效果:隐藏、显示、切换、滑动、淡入淡出、动画

    jQuery效果 隐藏.显示.切换.滑动.淡入淡出.以及动画1.隐藏与显示(改变:display:none;) hide()--隐藏 show()--显示toggle()方法:可以使用它来切换hide ...

  4. html仿今日头条下拉刷新,小程序 仿今日头条 带滑动切换的文章列表

    小程序 仿今日头条 带滑动切换的文章列表 发布时间:2018-07-19 09:41, 浏览次数:353 拿别人仿今日头条的代码做的改版, 首先感谢前辈.其次,这个代码虽然能用,但是js里还是存在一些 ...

  5. ios标签控制器怎么用_带故事板的iOS标签栏控制器

    ios标签控制器怎么用 In this tutorial we'll look into another type of view controller namely Tab Bar Controll ...

  6. [转]iOS 视图控制器转场详解

    转自:http://blog.devtang.com/2016/03/13/iOS-transition-guide/ 前言 屏幕左边缘右滑返回,TabBar 滑动切换,你是否喜欢并十分依赖这两个操作 ...

  7. 8行代码教你搞定导航控制器全屏滑动返回效果 ————转载

    作者:@吖了个峥 前言 此次文章,讲述的是导航控制器全屏滑动返回效果,而且代码量非常少,10行内搞定. 效果如图: 如果喜欢我的文章,可以关注我,也可以来小码哥,了解下我们的iOS培训课程.陆续还会有 ...

  8. iOS 开发之玩转专场动画

    有空了再造个轮子,先放个链接 WWDC 2013 Session笔记 - iOS7中的ViewController切换 几句代码快速集成自定义转场效果+ 全手势驱动 TransitionAnimati ...

  9. iOS教程:移动终端游戏动画设计的12个原则

    在移动设备用户体验设计领域,微妙精致的动画已成为非常重要的设计元素.为任何对象添加动画并不简单,需要观察研究在真实世界中物体是如何在时空中运动的,需要设计者关注细节,并且具有耐心.适当的动画能够提供清 ...

最新文章

  1. python单词大全-python常用的单词
  2. Unsupported compiler 'GCC 4.2' selected for architecture 'i386'错误
  3. Servlet(自己实现的Servlet)细节
  4. c语言尹宝林答案,c程序设计导引 尹宝林
  5. android中的SharedPreferences存储
  6. oracle数据库使用小结
  7. 30个有助于探索Go编程语言的在线资源
  8. 机器视觉——光源选型
  9. 福布斯发布区块链50强 这5家中国公司上榜
  10. shiro原理及其运行流程介绍
  11. 7.3万字肝爆Java8新特性,我不信你能看完!(建议收藏)
  12. 新手学编程的常见困惑
  13. win10c语言乱码修复方法,大神详解win10系统记事本中文变乱码的处理方案
  14. 洛谷P3110 [USACO14DEC]驮运Piggy Back
  15. mysql数据库中的正则表达式_MYSQL中正则表达式检索数据库
  16. 指导手册05:MapReduce编程入门
  17. Ubuntu安装NVIDIA 显卡驱动
  18. 苏宁易购开放平台_前三季度线上规模突破2000亿,苏宁易购三季度盈利7.14亿
  19. mysql 清除表中的数据 (TRUNCATE )
  20. matlab carcasonne,米迪运河.ppt

热门文章

  1. Android将so库封装到jar包中并加载其中的so库
  2. 小米android l主题,MIUI7=MIUI+4款主题?
  3. 计算机电源可调电阻,PC电源改可调电源
  4. 【Mysql】EVENT 使用基础 - Create Event
  5. 走向2012玛雅之路谭:为什么帝国倾向黑色民族?
  6. apache安装mysql数据库_配置eyeOS系统--3--安装mysql数据库和Apache服务器
  7. mysql 修改column操作
  8. quixel bridge导出材质卡住
  9. ArrayList的源码解读
  10. 《信号与系统学习笔记》—拉普拉斯变换(二)