[objc]-ios 分页控制器实现

效果图 如下 上方的滑条 根据页面可以滑动

思路: 

下方灰色的部分是一个scrollview 其中放置了2个view。

上方的绿色滑条是uilable控件。

绿色滑条下面是2个button。

实现:

在所有的controller外部套了一层NavigationController,所以会有UINavigationBar。

//首先viewController.h  新建控件 并且继承  <UIScrollViewDelegate>

@interface ViewController : BaseViewController<UIScrollViewDelegate>

//scrollview
@property (nonatomic,strong)UIScrollView * scrollView;
//移动的滑条
@property(nonatomic,strong)UILabel * navSlideLable;
//选择按钮
@property(nonatomic,strong)UIButton * view1Btn;
@property(nonatomic,strong)UIButton * view2Btn;

@end

//在viewController.m 文件中实现控件的懒加载。

#pragma mark Lazyout
-(UIScrollView *)scrollView{

    if (!_scrollView) {
        //距离头的的高度
        CGFloat scrollViewHeight = 100;
        //scrollview的大小位置
        _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, scrollViewHeight, SK_ScreenWidth,SK_ScreenHeight- scrollViewHeight - self.navigationController.navigationBar.frame.size.height -22)];
        _scrollView.showsHorizontalScrollIndicator = NO;
        _scrollView.pagingEnabled = YES;
        CGSize size = _scrollView.frame.size;
        //scrollview的宽度 = 页面的个数* 单个页面的宽度
        size.width *=2; //2个
        _scrollView.contentSize = CGSizeMake(size.width, 0);
        _scrollView.backgroundColor = [UIColor redColor];
        _scrollView.delegate = self; //设置代理

    }
    return _scrollView;

}

//移动的滑条
-(UILabel *)navSlideLable{

    if (!_navSlideLable) {

        _navSlideLable = [[UILabel alloc] init];
        _navSlideLable.backgroundColor = [UIColor colorWithRed:32/255.0 green:178/255.0 blue:170/255.0 alpha:1];
    }
    return _navSlideLable;
}

//Button
-(UIButton *)view1Btn{

    if (!_view1Btn) {

        _view1Btn = [[UIButton alloc]init];
        //给Btn一个target scrollview会根据tag 来移动位置
        _view1Btn.tag =(NSInteger) (0 / (self.view.frame.size.width / 2));
        [_view1Btn setFrame:CGRectMake(0, 0, SK_ScreenWidth/2, TOP_VIEW_ITEM_HEIGHT)];
        [_view1Btn setTitle:@"view1" forState:UIControlStateNormal];
        [_view1Btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        //给Btn添加相应方法
        [_view1Btn addTarget:self action:@selector(switchview1Btn:) forControlEvents:UIControlEventTouchUpInside];

    }
    return _view1Btn;
}
-(UIButton *)view2Btn{

    if (!_view2Btn) {

        _view2Btn = [[UIButton alloc]init];
        _view2Btn.tag =(NSInteger) (SK_ScreenWidth/2 / (self.view.frame.size.width / 2));
        [_view2Btn setFrame:CGRectMake(SK_ScreenWidth/2, 0, SK_ScreenWidth/2, TOP_VIEW_ITEM_HEIGHT)];
        [_view2Btn setTitle:view2 forState:UIControlStateNormal];
        [_view2Btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [_view2Btn addTarget:self action:@selector(switchview2Btn:) forControlEvents:UIControlEventTouchUpInside];  

    }
    return _view2Btn;
}

//viewDidLoad 添加控件到页面上

scrollview中的视图我另外新建了2个UIView的类 FirstView 和SecondView 方便再自定义视图

滑条和按钮的位置是可以自己修改的 我写的是在上方 也可以自己写到下方或者其他的地方改变一下位置就好啦

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.view.backgroundColor  = [UIColor whiteColor];

    //添加移动滑条
    [self.view addSubview: self.navSlideLable];
    //移动滑条的初始位置 (应为只有2个按钮所以宽度直接是屏幕的一半 多个自己调节就好)
    [self.navSlideLable setFrame:CGRectMake(0,0, SK_ScreenWidth/2, TOP_VIEW_LINE_HEIGHT)];

    //添加按钮
    [self.view addSubview:self.view1Btn];
    [self.view addSubview:self.view2Btn];

    //添加scrollview 中的视图
    //第一个页面的位置是 0 0
    FirstView * firstView = [[FirstView alloc]initWithFrame:CGRectMake(0, 0, SK_ScreenWidth, self.scrollView.frame.size.height)];
    //第二个页面的起始位置就是加上第一个页面的宽度 依次类推
    SecondView * secondView = [[SecondView alloc]initWithFrame:CGRectMake(self.scrollView.frame.size.width, 0, SK_ScreenWidth, self.scrollView.frame.size.height)];
    //添加scrollview 中的视图
    [self.scrollView addSubview:firstView];
    [self.scrollView addSubview:firstView];
    //添加scrollview
    [self.view addSubview: self.scrollView];

}

 //实现Button的响应方法

//这里点击后不需要改动滑条的位置,按钮一点击就会改动scrollview的位置,会自己响应scrollview的代理方法去改变滑条的位置

-(void)switchview1Btn:(UIButton *)button{
    //点击Button 根据button的tag 来改变scrollview 滑动的位置
    [self.scrollView setContentOffset:CGPointMake(button.tag * self.view.frame.size.width, 0) animated:YES];

}
-(void)switchview2Btn:(UIButton *)button{
    //点击Button 根据button的tag 来改变scrollview 滑动的位置
    [self.scrollView setContentOffset:CGPointMake(button.tag * self.view.frame.size.width, 0) animated:YES];

}

//实现scrollview的代理方法移动视图的位置

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint offset = scrollView.contentOffset;
    //应为只有2个按钮和页面所以 处以2 3个就处以3
    CGFloat x = offset.x / 2;
    if (x !=0 &&x < scrollView.frame.size.width) {
       //移动滑条的位置
        CGRect frame = self.navSlideLable.frame;
        frame.origin.x = x;
        self.navSlideLable.frame = frame;
    }
}

 

以上????

 

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px }
span.s1 { }
span.s2 { color: #000000 }
span.s3 { color: #703daa }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #008400 }
span.s1 { font: 11.0px Menlo }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #008400 }
span.s1 { font: 11.0px Menlo }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa }
span.s1 { color: #000000 }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400 }
span.s1 { }

时间: 2024-10-07 00:11:47

[objc]-ios 分页控制器实现的相关文章

UISegmentedControl(分页控制器) AND UISlider(滑块控制器)

- (void)viewDidLoad { [super viewDidLoad]; UIImageView * animatedImageView = [[UIImageView alloc]initWithFrame:CGRectMake(60, 80, 200, 300)]; animatedImageView.backgroundColor = [UIColor redColor]; animatedImageView.tag = 100; [self.view addSubview:a

iOS tabbar 控制器基本使用

RootViewController *rootVC=[[RootViewController alloc] init] SignInViewController *signVC = [[SignInViewController alloc]init]; //如果在这里指定tabitem标题,则在FirstViewController中指定self.tabBarItem.title则不生效 signVC.title = @"打卡"; UITabBarItem *signItem = [

关于ios导航控制器的知识总结

关于ios导航控制器的知识总结 添加了导航控制器后: 1.每个页面都会有一个顶部导航栏navigationbar和底部工具栏toolbar,它们是导航控制器navC的属性.且导航栏默认是不隐藏的,而底部工具栏默认是隐藏的. 2.可以通过设置 self.navigationController.toolbarHidden = NO来显示底部工具栏,工具栏中的内容可以通过viewController的toolbarItems来设置,显示的顺序和设置的NSArray中存放的顺序一致,其中每一个数据都一

ios导航控制器UINavigationController,控制器a跳转(push)到b后,b跳转(push)到c,但c后退(pop)进入a

参考:StackOverflow ios导航控制器UINavigationController,控制器a跳转(push)到b后,b跳转(push)到c,但c后退(pop)进入a.在b跳转(push)到c中代码书写如下: UINavigationController *navController = [[self.navigationController retain] autorelease]; [navController popViewControllerAnimated:NO]; View

IOS UIPageControl(分页控制器) 用法总结

UIPageControll 是继承于UIControl的一个IOS系统UI控件,可以提供给开发者设计分页效果的功能. 初始化方法 UIPageControl * page = [[UIPageControl alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; 设置控制器页数(默认为0) @property(nonatomic) NSInteger numberOfPages; 设置当前所在页码 @property(nonatomic) NS

IOS的控制器

控制器简单来说,就是用来做界面跳转的,类似于 Android 的Intent 1.创建一个控制器 1 控制器的常见的创建方式 2 3 1)通过storyboard创建 4 5 //直接创建 6 NJViewController *nj = [[NJViewController alloc]init]; 7 8 //指定xib文件 9 NJViewcontroller *nj = [[NJViewController alloc] 10 initWithNibName:@"NJViewContro

13.ios之控制器管理

掌握 ?控制器以及view的多种创建方式 ?UINavigationController的简单使用:添加\移除子控制器 ?UINavigationBar内容的设置 ?控制器的生命周期方法 如何创建一个控制器 控制器常见的创建方式有以下几种 通过storyboard创建 直接创建 MJViewController *mj = [[MJViewController alloc] init]; 指定xib文件来创建 MJViewController *mj = [[MJViewController a

IOS视图控制器的生命周期

原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents 所谓的生命周期,也就是几个函数的调用顺序,这里以用Storyboard来创建一个ViewController为例 然后我们测试如下代码 // // ViewController.m // // Created by huangwenchen on 14/12/26. // Copyright (c) 2014年 huangwenchen. All rights rese

iOS开发——控制器OC篇&amp;UINavigationController&amp;UITabBarController详解

UINavigationController&UITabBarController详解 一:UINavigationController 控制器的属性: UINavigationController以栈的形式保存子控制器 @property(nonatomic,copy) NSArray *viewControllers; @property(nonatomic,readonly) NSArray *childViewControllers; 导航控制器之间的跳转: 使用push方法能将某个控制