BMExtendablePageController 0.1.1

BMExtendablePageController 0.1.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

未声明的 维护。



  • Benjamin Müller

UIPageController / NSPageController 的替代品,因为我们需要 自定义过渡

BMExtPageController 是一个 即插即用 的替代品,几乎包含了 UIPageController 中所有功能,所以如果您已经开始一个项目并且觉得默认的过渡样式和行为受限,那么请尝试使用 BMExtPageController。

提供的功能

  • iOS 和 OSX 兼容
  • 提供两种过渡类型
    • 基本过渡
    • 连续过渡 - 例如,通过附加滑动手势来控制过渡时间
  • 自定义过渡
    • 使用以下内置过渡之一,目前支持:
      • 基本过渡:淡入淡出
      • 基本过渡:水平翻转
      • 连续过渡:水平 分页 滚动
    • 通过采用所需的协议轻松扩展或从头创建
      • BMExtendablePageTransition
      • BMExtendableContinuousePageTransition
  • 面向性能的实现
    • 自动页面预加载
    • ViewController 回收
    • 使用 GrandDispatchCentral 进行多线程操作
  • 无其他依赖项

项目集成

使用 Cocoapods 并在 Podfile 中添加以下依赖项

pod 'BMExtendablePageController'

示例用法

为 BMExtandablePageController 提供内容的方式与 Bookmode 中讨论的 NSPageController 相同

iOS 示例项目

01. 创建实例

通过在 storyboard/xib 中拖动 UIView/NSView 或者在代码中创建一个,创建 BMExtendablePageController 的实例。无论如何,您需要提供实现 BMExtendablePageControllerDelegate 协议的 委托,并将包含每个页面数据的 NSArray 分配给 arrangedObjects 属性。

BMExtendablePageController *pageController = [[BMExtendablePageController alloc] 
                                               initWithDelegate:self    
                                                arrangedObjects:@[@„page01“,@„page02“,@„page03“] 
                                                      completed:^{
                                                        // page load completed - do what ever you want.
                                                      }];

02. 委托实现

// return identifiers ( to support recycling )
-(NSString *)pageController:(BMExtendablePageController *)pageController identifierForIndex:(int)index{

    if (index == 0) {
        return @„VIEW_CONTROLLER_1“;
    }else if(index == 1){
        return @„VIEW_CONTROLLER_2“;
    }else{
        return @„VIEW_CONTROLLER_3“;
    }
}

// return new instances depending on identifier
-(UIViewController *)pageController:(BMExtendablePageController *)pageController viewControllerForIdentifier:(NSString *)identifier{

    if([identifier isEqualToString:VIEW_CONTROLLER_1])
        return [[ViewController01 alloc] init];
    else if([identifier isEqualToString:VIEW_CONTROLLER_2])
        return [[ViewController02 alloc] init];
    else
        return [[ViewController03 alloc] init];
}

-(void)pageController:(BMExtendablePageController *)pageController  
prepareViewController:(UIViewController *)viewController withObject:(id)object{
    // update the (eventually recycled)  view controller with page specific data object
    viewController.data = object;    
}

03. 执行过渡

如果您想要执行 基本过渡,只需调用:

// next page
[_pageController nextPageWithTransitionStyle:[BMHorizontalFlipTransition transition]];

// or previous page
[_pageController prevPageWithTransitionStyle:[BMHorizontalFlipTransition 
       transition]];

// or any page
[_pageController setSelectedIndex:104 withTransition:[BMFadeTransition transition]];       

请注意:您负责保持您的索引边界内。

或者将一个 连续过渡附加到页面控制器(例如在触摸时)

_currentTransition = [_pageController attachContinuouseTransition:  [BMHorizontalCTransition transition]];

然后根据需要更新 _currentTransition - 例如在 scrollViewDidScroll:

[_currentTransition updateTransitionWithValue:normalizedIndex]; // -1.0 < normalizedIndex < +1.0

可用的过渡效果

  • 水平翻页过渡,与NSPageControllers的NSPageControllerTransitionStyleHorizontalStrip相同
  • 连续水平过渡,与水平翻页过渡相同,但可以完全控制过渡进程(例如,通过附加拖拽手势更新)
  • 淡入淡出过渡

贡献

Please feel invited to contribute to this projects. 尤其是欢迎贡献更多花哨的过渡样式。

协议

MIT License

版权所有(C) 2013 Benjamin Müller

任何人可以免费、无限制地对待此软件和相关的文档文件(以下简称"软件"),包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件的副本,以及允许接收软件副本的个人进行上述活动,前提是遵守以下条件

上述版权声明和本许可声明应包括在软件的所有副本或大部分内容中。

软件按“现状”提供,不提供任何形式的保证,无论是明确保证还是暗示保证,包括但不限于适销性、适用于特定目的和非侵权性保证。在任何情况下,作者或版权所有者不对因软件本身或其使用或其他任何与之相关的事项而产生的任何索赔、损害或其他责任承担责任,包括合同、侵权或其他责任。