GithubHelp home page GithubHelp logo

imqiuhang / qhpageviewcontroller Goto Github PK

View Code? Open in Web Editor NEW
13.0 1.0 2.0 2.34 MB

更简单的PageViewController,解决UIPageViewController各种崩溃问题。

License: MIT License

Objective-C 96.49% Ruby 3.51%
pager-controller uipageviewcontroller pagertabstrip

qhpageviewcontroller's Introduction

QHPageViewController

更简单的使用PageViewController,解决UIPageViewController各种姿势的崩溃问题以及繁琐的代理使用。

设计用于应对类似于抖音, 映客, 考拉等类型 APP, 滑动切换视频/直播控制器, 并针对此类场景, 优化了控制器生命周期及页面缓存.

License MIT

Features

  • 支持横向,垂直切换
  • 解决UIPageViewController自带偶现闪退问题
  • 缓存优化,静止时只缓存一个VC,切换时只缓存2个VC,切换后释放多余的,符合视频浏览等常规操作(UIPage一般3个)
  • 子VC生命周期一致性和UIPageViewController子VC一致
  • 切换回调和UIPageViewController回调时机一致,做了计算优化,只有当上一个VC滑出屏幕后才会回调切换
  • API优化,类UITabView方式使用,数据源数量和数据源创建一致,无需UIPage繁琐代理

demo

Podfile

To integrate QHPageViewController into your Xcode project using CocoaPods, specify it in your Podfile:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

target 'TargetName' do
pod 'QHPageViewController', '~> 0.1.0'
end

Usage

- (void)setup {
    
    // Vertical or Horizontal
    self.pageView = [[QHPageViewController alloc] initWithOrientation:QHPageViewControllerNavigationOrientationVertical
                                                               delegate:self
                                                             dataSource:self];
                                                             
    // add to parent‘s lifecycle
    [self addChildViewController:self.pageView];
    [self.view addSubview:self.pageView.view];
    self.pageView.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
    //类似tableView,任何时候reload
    [self.pageView reload];
    //手动move
    [self.pageView moveToControllerAtIndex:1 animation:YES];
}

//数据源
- (NSInteger)numberOfViewControllersForPageViewController:(QHPageViewController *)pageViewController {
    return self.count;
}

- (UIViewController *)pageViewController:(QHPageViewController *)pageViewController
                  viewControllerForIndex:(NSInteger)index {
    
    NSLog(@"\n---------\n%li>>>>>>>creat\n---------\n",(long)index);
    
    HTCMPageViewChildViewController *vc= [[HTCMPageViewChildViewController alloc] init];
    vc.index = index;
    return vc;
}

//回调
- (void)pageViewController:(QHPageViewController *)pageViewController
        didUpdateIndexFrom:(NSInteger)formIndex
                   toIndex:(NSInteger)toIndex {
    NSLog(@"\n---------\n%li>>>>>>>move to >>>>>>>%li\n---------\n",(long)formIndex,(long)toIndex);
}

生命周期对比

 i】表示tab所在的index
 ---------------------------------------------------------
 * 从【0】慢慢上滑露出【1】,然后放手重新回弹到了【0】这个过程
 
 ==== UIPageViewController ====
 【1】####### init
 【1】>>>>>>> viewWillAppear
 【0】>>>>>>> viewWillDisappear
 【0】>>>>>>> viewWillAppear
 【0】>>>>>>> viewDidAppear
 【1】>>>>>>> viewWillDisappear
 【1】>>>>>>> viewDidDisappear
 
 ==== QHPageViewController ====
 【1】####### init
 【1】>>>>>>> viewWillAppear
 【0】>>>>>>> viewWillDisappear
 【1】>>>>>>> viewWillDisappear
 【1】>>>>>>> viewDidDisappear
 【1】####### delloc (这里有所不同,因为我们只缓存当前在屏幕上的VC,消失即释放)
 【0】>>>>>>>viewWillAppear
 【0】>>>>>>>viewDidAppear
 
 ---------------------------------------------------------
 * 从【0】直接滑到【1】,包括手动滑动或者调用接口切换
 ==== UIPageViewController ====
 【1】>>>>>>> viewWillAppear
 【0】>>>>>>> viewWillDisappear
 【1】>>>>>>> viewDidAppear
 【0】>>>>>>> viewDidDisappear
 
 ==== QHPageViewController ====
 【1】>>>>>>> viewWillAppear
 【0】>>>>>>> viewWillDisappear
 【1】>>>>>>> viewDidAppear
 【0】####### delloc
 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.