平铺导航——基于分屏导航的实现(IOS开发)

导航模式

-平铺导航:内容没有层次关系,其实就在一个主屏幕上,只是采用分屏分页控制器来导航,可以左右上下滑动屏幕查看内容。(如:系统自带的天气)

-标签导航:内容被分割几个功能模块,但这些功能实际上没有任何关系。通过标签管理。标签应用太多太多了。。。

-树形导航:有层次,从上到下细分为或者为包含的关系。(如:邮箱)

这几个经常组合起来一起使用。

这里主要讲平铺导航。

用到的控件为分屏控件(UIPageControl)和滚动视图控件(ScrollView),在这个过程中我们可能确实新建了许多View Controller的视图控制器,但是实际上并不属于任何子类,只是为了让我们几个图片有个地方放置。

这里需要理解的是,这个app只有一个View,这个View包含了一个ScrollView,而这个ScrollView有好几个屏那么大,每个屏一张图。我们在左右划动的时候就好像有好多个View一样,但实际真正划动的是巨大的ScrollView。

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIScrollViewAccessibilityDelegate>

@property (strong, nonatomic) UIView *page1;
@property (strong, nonatomic) UIView *page2;
@property (strong, nonatomic) UIView *page3;

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;

- (IBAction)changePage:(id)sender;
@end
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width*3, self.scrollView.frame.size.height);
    self.scrollView.frame = self.view.frame;

    // 新建SB的引用
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    //
    // 下面的一段代码是为了获取项目中制定文件名的ViewController
    // page1.page2.page3在h中时连不上热点的,因为从这个角度来看他们更像是属性
    // contentsize是内容大小,而frame是视窗大小
    UIViewController* page1ViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"page1"];
    self.page1 = page1ViewController.view;
    self.page1.frame = CGRectMake(0.0f, 0.0f, 320.0f, 420.0f);

    UIViewController* page2ViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"page2"];
    self.page2 = page2ViewController.view;
    self.page2.frame = CGRectMake(320.0f, 0.0f, 320.0f, 420.0f);

    UIViewController* page3ViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"page3"];
    self.page3 = page3ViewController.view;
    self.page3.frame = CGRectMake(2 * 320.0f, 0.0f, 320.0f, 420.0f);

    // 需要实现UIScrollViewDelegate协议
    self.scrollView.delegate = self;

    [self.scrollView addSubview:self.page1];
    [self.scrollView addSubview:self.page2];
    [self.scrollView addSubview:self.page3];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

// 每次划屏后,需要计算和设定分屏空间的当前屏currentPage
- (void) scrollViewDidScroll:(UIScrollView *)aScrollView
{
    // offset为内容大小
    CGPoint offset = aScrollView.contentOffset;
    self.pageControl.currentPage = offset.x / 320.0f; // 返回当前是第几页
}

// 这是为了产生动画效果
- (IBAction)changePage:(id)sender {
    [UIView animateWithDuration:0.3f animations:^{
        int whichPage = self.pageControl.currentPage;
        self.scrollView.contentOffset = CGPointMake(320.0f*whichPage, 0.0f);
    }];
}
@end
时间: 2024-10-06 12:56:39

平铺导航——基于分屏导航的实现(IOS开发)的相关文章

单界面的导航栏和工具栏的用法(IOS开发)

1.工具栏: -可以放置UIButtton,一般配合可变空格使用 -iPhone中工具栏位于屏幕底部,按钮不超过5个 -iPad中工具栏位于屏幕顶部,按钮数量不限 -应用当前界面,考虑的是局部 2.导航栏 - 导航栏-导航栏控制器-多个导航栏项目-可以放置UIButton -考虑的使全局,多界面下 -一般使用标准按钮,这样符合苹果设计的规范 -放置在iPhone顶部(需要留出20点距离给状态栏)

视图控制器和导航模式一(模态视图,平铺导航)

视图控制器的种类 UIViewController.用于自定义视图控制器的导航.例如,对于两个界面的跳转,我们可以用一个UIViewController来控制另外两个UIViewController. UINavigationController.导航控制器,它与UITableViewController结合使用,能够构建树形结构导航模式. UITabBarController.标签栏控制器,用于构建树标签导航模式. UIPageViewController.呈现电子书导航风格的控制器 UISp

iOS开发指南 第7章 视图控制器与导航模式 学习

1 概述 分类:平铺导航模式 标签导航模式 树形导航模式 2 模态视图 必须要一个单独的模态视图控制器 呈现 代码方法:presentViewController:animated:completion: 故事板segue方式 关闭 dismissViewControllerAnimated:completion: 获取navigationBar:拖拽一个 Editor-Embed in-Navigation Controller 创建一个navigation controller interf

iOS开发项目篇—04添加导航栏的按钮

iOS开发项目篇—04添加导航栏的按钮 一.设置导航栏的按钮 要求实现的效果:             说明:默认状态下和高亮状态下的图片是不一样的. 按钮的图片需要设置默认状态和高亮状态时的显示,系统了提供的下面方法 viewController.navigationItem.leftBarButtonItem=[UIBarButtonItem alloc]initWithImage:<#(UIImage *)#> style:<#(UIBarButtonItemStyle)#>

大屏iPhone的适配 +iOS 图片尺寸要求

摘自:http://blog.ibireme.com/2014/09/16/adapted_to_iphone6/ 苹果公司官网设计介绍到:Retina显示屏的超高像素密度已超过人眼能分辨的范围.Retina对图像设计(图标.启动画面和其它所有像素有关的东西)有什么影响呢?如果我们的app要支持Retina,就要提供高分辨率的(宽x2,高x2)的图片.同时,为了支持没有Retina的设备,仍旧要准备低分辨率的版本. 换言之,我们要准备两套设计图. 针对不同分辨率的图片,苹果规定了一个命名规范:假

网页导航菜单的子菜单平铺(带背景栏)实现

- 之前给公司做的一个小型知识库管理网站时遇到一个问题,在这里记录下解决的过程. 公司的美工要求首页导航菜单 要跟他们公司的网站风格保持一致,如图所示 (子菜单是平铺的) 我一看,心想很简单嘛 先贴一下通用菜单html结构 <li>     <a href="" class="abc">热设计</a>          <ul>               <li><a href="&quo

iOS开发——实用技术OC篇&amp;8行代码教你搞定导航控制器全屏滑动返回效果

8行代码教你搞定导航控制器全屏滑动返回效果 前言 此次文章,讲述的是导航控制器全屏滑动返回效果,而且代码量非常少,10行内搞定. 效果如图: 如果喜欢我的文章,可以关注我,也可以来小码哥,了解下我们的iOS培训课程.陆续还会有更新ing.... 一.自定义导航控制器 目的:以后需要使用全屏滑动返回功能,就使用自己定义的导航控制器. 二.分析导航控制器侧滑功能 效果:导航控制器默认自带了侧滑功能,当用户在界面的左边滑动的时候,就会有侧滑功能. 系统自带的侧滑效果: 分析: 1.导航控制器的view

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

http://www.cocoachina.com/ios/20150811/12897.html 作者:@吖了个峥授权本站转载 前言 此次文章,讲述的是导航控制器全屏滑动返回效果,而且代码量非常少,10行内搞定. 效果如图: 如果喜欢我的文章,可以关注我,也可以来小码哥,了解下我们的iOS培训课程.陆续还会有更新ing.... 一.自定义导航控制器 目的:以后需要使用全屏滑动返回功能,就使用自己定义的导航控制器. 二.分析导航控制器侧滑功能 效果:导航控制器默认自带了侧滑功能,当用户在界面的左

二级导航菜单全屏展示

实现效果: 1.二级菜单下拉展示的全屏展示,下拉内容块居中 2.一级菜单 并不是所有都有二级下拉菜单 ,不能使用,通过比较标签内的属性来确认具体是哪个一级导航有下拉菜单,比如 <div index="product"></div>对比一级菜单和二级菜单的index属性来显示对应的内容: <ul> <li> <a href="#">一级导航</a> <div class="sub_