UIPageController / NSPageController 的替代品,因为我们需要 自定义过渡!
BMExtPageController 是一个 即插即用 的替代品,几乎包含了 UIPageController 中所有功能,所以如果您已经开始一个项目并且觉得默认的过渡样式和行为受限,那么请尝试使用 BMExtPageController。
使用 Cocoapods 并在 Podfile 中添加以下依赖项
pod 'BMExtendablePageController'
为 BMExtandablePageController 提供内容的方式与 Bookmode 中讨论的 NSPageController 相同
通过在 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.
}];
// 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;
}
如果您想要执行 基本过渡,只需调用:
// 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
Please feel invited to contribute to this projects. 尤其是欢迎贡献更多花哨的过渡样式。
MIT License
版权所有(C) 2013 Benjamin Müller
任何人可以免费、无限制地对待此软件和相关的文档文件(以下简称"软件"),包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件的副本,以及允许接收软件副本的个人进行上述活动,前提是遵守以下条件
上述版权声明和本许可声明应包括在软件的所有副本或大部分内容中。
软件按“现状”提供,不提供任何形式的保证,无论是明确保证还是暗示保证,包括但不限于适销性、适用于特定目的和非侵权性保证。在任何情况下,作者或版权所有者不对因软件本身或其使用或其他任何与之相关的事项而产生的任何索赔、损害或其他责任承担责任,包括合同、侵权或其他责任。