UIPageViewController使用示例

#import "MediumController.h"
#import "PhotoViewController.h"
#import "VideoViewController.h"

@interface MediumController ()<UIPageViewControllerDataSource,UIPageViewControllerDelegate>
{
    NSMutableArray *_pageArray;
    UIPageViewController *_pageCtrl;
    UISegmentedControl *_segCtrl;

    //当前页
    NSInteger _curPage;
}
@end

@implementation MediumController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self createTopView];
    [self createPageData];
    [self createPagrVC];

    [self createBackBtn];

    self.view.backgroundColor = [UIColor whiteColor];
}
//创建顶部按钮
-(void)createTopView
{
    _segCtrl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"预告片",@"剧照", nil]];
    [_segCtrl addTarget:self action:@selector(clickSegCtrl:) forControlEvents:UIControlEventValueChanged];
    [_segCtrl setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]} forState:UIControlStateNormal];
    [_segCtrl setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor blackColor]} forState:UIControlStateSelected];
    [_segCtrl setTintColor:[UIColor whiteColor]];

    _segCtrl.frame = CGRectMake(100, 7, kScreenWidth-200, 30);
    if (_type == MoviesType) {
        _segCtrl.selectedSegmentIndex = 0;
    }
    else if(_type == PhotoType)
    {
        _segCtrl.selectedSegmentIndex = 1;
    }
    self.navigationItem.titleView = _segCtrl;
}
//创建pagecontrol
-(void)createPagrVC
{
    NSInteger index = _type;
    _pageCtrl = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
    _pageCtrl.delegate = self;
    _pageCtrl.dataSource = self;
    [_pageCtrl setViewControllers:@[_pageArray[index]] direction:UIPageViewControllerNavigationDirectionForward animated:nil completion:nil];
    _pageCtrl.view.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight);
    [self.view addSubview:_pageCtrl.view];
}
//创建数据源
-(void)createPageData
{
    _pageArray = [NSMutableArray array];
    VideoViewController *vvc = [[VideoViewController alloc] init];
    vvc.videoArray = _videoArray;
    [_pageArray addObject:vvc];
    PhotoViewController *pvc = [[PhotoViewController alloc] init];
    pvc.photoArray = _photoArray;
    [_pageArray addObject:pvc];

}

-(void)clickSegCtrl:(UISegmentedControl *)ctrl
{
    NSInteger index = ctrl.selectedSegmentIndex;
    [_pageCtrl setViewControllers:@[_pageArray[index]] direction:index<_curPage animated:YES completion:^(BOOL finished){
        _curPage = index;
    }];
}

#pragma mark --UIPageViewController代理----
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSInteger index = [_pageArray indexOfObject:viewController];
    if (index+1 == _pageArray.count) {
        return nil;
    }
    return _pageArray[index+1];
}
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSInteger index = [_pageArray indexOfObject:viewController];
    if (index == 0) {
        return nil;
    }
    return _pageArray[index-1];
}

-(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
    _curPage = [_pageArray indexOfObject:pageViewController.viewControllers[0]];
    _segCtrl.selectedSegmentIndex = _curPage;
}

@end
时间: 2024-10-12 22:32:34

UIPageViewController使用示例的相关文章

iOS 5 :一个UIPageViewController程序示例

原文:http://www.techotopia.com/index.php/An_Example_iOS_5_iPhone_UIPageViewController_Application 在Xcode中新建项目时,可以选择“Page-based Application”项目模板.可以利用这个模板创建一种“基于页”的应用程序,在1年的每个月中显示不同的页.奇怪的是,这是Xcode提供的唯一一个基于实例的模板而不是应用程序基本框架.这对于一开始学习时很有用,但除非你真的需要一个用12页来显示1年

pfsense Web服务器负载平衡配置示例

在pfsense的网关和服务器中有两种类型的负载平衡功能.网关负载平衡可以通过多个WAN连接分发Internet绑定的流量.服务器负载平衡管理传入流量,因此它利用多个内部服务器进行负载分配和冗余,服务器负载平衡允许流量在多个内部服务器之间分配,它最常用于Web服务器和SMTP服务器.下面我们就以实例来介绍服务器负载平衡的设置. 下面介绍如何通过pfsense2.32配置Web服务器的负载平衡. 网络环境 服务器负载平衡示例网络环境 上图为示例网络环境.它由单个防火墙组成,使用其WAN IP地址池

docker深入2-API示例

2017/9/18 一.目的 演示 http API 使用的方式 注1:本次实例是在 docker swarm mode 下使用的,目的是:更新指定服务的镜像. 注2:要在 swarm manager node 上执行. docker 的 API 文档是自动生成的,没有太多有用的示例可用. [版本] ~]# docker version Client:  Version:      17.06.0-ce  API version:  1.30  Go version:   go1.8.3  Gi

Storm入门(四)WordCount示例

Storm API文档网址如下: http://storm.apache.org/releases/current/javadocs/index.html 一.关联代码 使用maven,代码如下. pom.xml  和Storm入门(三)HelloWorld示例相同 RandomSentenceSpout.java /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor lice

java第15章示例代码

import java.util.Scanner; /** * * @author asus第15章示例代码1 全桂群2017.4.9 * */public class Registter { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); String uname, pw

算法之冒泡排序(Java示例)

冒泡排序(英语:Bubble Sort) 是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 动画示意 实现示例 Java 1 public class BubbleSortExample { 2 3 static void bubbleSort(int[] arr){ 4 int len =

Java多线程系列--“JUC锁”11之 Semaphore信号量的原理和示例

概要 本章,我们对JUC包中的信号量Semaphore进行学习.内容包括:Semaphore简介Semaphore数据结构Semaphore源码分析(基于JDK1.7.0_40)Semaphore示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3534050.html Semaphore简介 Semaphore是一个计数信号量,它的本质是一个"共享锁". 信号量维护了一个信号量许可集.线程可以通过调用acquire()来获取信号量的许可

Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例

概要 本章介绍JUC包中的CyclicBarrier锁.内容包括:CyclicBarrier简介CyclicBarrier数据结构CyclicBarrier源码分析(基于JDK1.7.0_40)CyclicBarrier示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3533995.html CyclicBarrier简介 CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier p

20个不可思议的 WebGL 示例和演示

WebGL 是一项在网页浏览器呈现3D画面的技术,有别于过去需要安装浏览器插件,通过 WebGL 的技术,只需要编写网页代码即可实现3D图像的展示.WebGL 可以为 Canvas 提供硬件3D加速渲染,这样 Web 开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了.在这篇文章中20个不可思议的 WebGL 示例来增强你对于这个新技术的理解. 1. Aquarium Image Source:www.webglsamples.org Created by Greggman an