[iOS 控件]翻页切换

作者: Koneey | 来源:发表于2015-10-28 15:16 被阅读1368次

实现如下效果:


pageViewpageView

分析

通过传入标题数组, 视图控制器数组初始化 UIScrollView, 实现翻页.
通过 ViewController的 addChildrenViewCrotroller 来让各个自视图控制器控制子视图.

实现

代理方法

类似系统 UITableView 的实现方式, 定义数据源,与代理方法

  • id<LUHPageViewControllerSourceDate> sourceData
@protocol LUHPageViewControllerSourceDate <NSObject>
@required
-(NSInteger)widthWithSingleTitle;
-(NSArray *)titlesForPage:(LUHPageViewController *)pageView;
-(NSArray *)contentViewControllersForPage:(LUHPageViewController *)pageView;
@end
  • id<LUHPageViewControllerDelegate> delegate
@protocol LUHPageViewControllerDelegate <NSObject>
-(void)pageDidShow:(UIViewController *)viewController;
@end

主要实现逻辑

设置标题

-(void)addTitle {
    NSArray *titles = [self.sourceData titlesForPage:self];
    NSInteger titlesWidth = [self.sourceData widthWithSingleTitle];
    
    if (self.titleStyle == LUHPageViewTitleStyleSegment) {
        _segmentControl = [[UISegmentedControl alloc] initWithItems:titles];
        _segmentControl.selectedSegmentIndex = 0;
        _segmentControl.frame = CGRectMake(0, 0, titles.count * titlesWidth, kLUHPageViewControllerTitleHeight);
        [_segmentControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
        
        [self.navigationItem setTitleView:_segmentControl];
    } else if (self.titleStyle == LUHPageViewTitleStyleUnderlineButton) {
        _underLineButtonView = [[LUHUnderLineButtonView alloc] initWithItems:titles];
        _underLineButtonView.frame = CGRectMake(0, 0, titles.count * titlesWidth, kLUHPageViewControllerTitleHeight);
        [_underLineButtonView addTarget:self action:@selector(underLineButtonAction:)];
        
        [self.navigationItem setTitleView:_underLineButtonView];
    }
    
    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:.7 green:.7 blue:.8 alpha:1];
}

设置 scrollView

-(void)addContentViewController
{
    NSArray *contents = [self.sourceData contentViewControllersForPage:self];
    _contentsView = [NSArray arrayWithArray:contents];
    int i = 0;
    for (UIViewController *page in contents) {
        [self addChildViewController:page];
        page.view.frame = CGRectMake(CGRectGetWidth(self.view.frame)*i,
                                     0, CGRectGetWidth(self.view.frame),
                                     CGRectGetHeight(self.view.frame));
        [self.scrollView addSubview:page.view];
        i++;
    }
}

源代码

相关文章

  • [iOS 控件]翻页切换

    实现如下效果: 分析 通过传入标题数组, 视图控制器数组初始化 UIScrollView, 实现翻页.通过 Vie...

  • IOS 小说阅读《覆盖翻页》效果框架 DZMCoverAnima

    IOS小说阅读《覆盖翻页》效果支持控制器切换也支持View切换注意:打开工程默认是支持控制器切换的右键ShowFi...

  • ViewPager全面总结

    一、简介 Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位...

  • ViewPager

    一、简介 Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位...

  • ViewPager 全面总结

    一、简介 Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位...

  • ViewPager介绍及应用

    一、简介 Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位...

  • 仿IOS标题切换控件

    再次更新使用中发现因为每个矩形都是左右两个小的拼成的,有时候中间会出现重叠的现象,也就是1px宽,考虑是使用Rec...

  • React-native之开源Tab导航组件(17)

    一. 简介 大多数应用都会有导航进行页面切换,React Native原生的控件仅有TabBarIOS可供iOS平...

  • 【Android 进阶】仿抖音系列之列表播放视频(二)

    上一篇中,我们实现了仿抖音上下翻页切换视频的效果,详见【Android 进阶】仿抖音系列之翻页上下滑切换视频(一)...

  • 漂亮刷新控件-iOS

    漂亮刷新控件-iOS 漂亮刷新控件-iOS

网友评论

    本文标题:[iOS 控件]翻页切换

    本文链接:https://www.haomeiwen.com/subject/eanxhttx.html