文档章节

iOS自定义UIPageControl,做一个漂亮的滚动视图

iShown
 iShown
发布于 2016/02/25 18:33
字数 358
阅读 944
收藏 10


写一些需要注意的事项:

pagecontrol的frame设置时候尽量用bound,否则会出现不可预料问题

pagecontrol的subviews是个view的数组,而不是UIImageView(网上的资料全说是UIImageView,已经是之前版本了,可以log一下看看)


自定义PageController

@interface DiyPageController : UIPageControl {
    UIImage * _imagePageNomal;
    UIImage * _imagePageHighlited;
}
- (id)initWithFrame:(CGRect)frame;
@end

@implementation DiyPageController
- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    _imagePageNomal = [UIImage imageNamed:@"ADPicSlideIcon"];
    _imagePageHighlited = [UIImage imageNamed:@"ADPicSlideIconActive"];
    return self;
}
- (void)setCurrentPage:(NSInteger)currentPage {
    [super setCurrentPage:currentPage];
    [self updateDots];
}
-(void) updateDots {
    for (int i = 0; i < [self.subviews count]; i++) {
        UIView * dot = [self.subviews objectAtIndex:i];
        UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(-2, -2, 10, 10)];

//        CGSize size;
//        size.height = 1;     //自定义圆点的大小
//        size.width = 1;      //自定义圆点的大小,下边注释set方法是设置view的frame
//        [dot setFrame:CGRectMake(dot.frame.origin.x, dot.frame.origin.y, size.width, size.width)];
        imageView.image = (i == self.currentPage) ? _imagePageHighlited : _imagePageNomal;
        [dot addSubview:imageView];

        
    }
}

添加pageController

- (void)createPageController{
    //实例化页面管理
    _pageController = [[DiyPageController alloc] initWithFrame:CGRectMake(0, 60, self.bounds.size.width, 20)];
//    _pageController.center = CGPointMake(ScreenWidth / 2, 60);
    //一共有多少页(滚动循环多了两张)
    _pageController.numberOfPages = 3;
    //设置选中页
    _pageController.currentPage = 0;
    //设置点击换页码   默认no(切换)
    _pageController.defersCurrentPageDisplay = NO;
    //设置背景色
    //    _pageController.backgroundColor = RandomColor;
    
    //给pageControl添加行为
//    [_pageController addTarget:self action:@selector(pageNumberChanged:) forControlEvents:UIControlEventValueChanged];
//    [_pageController addTarget:self action:@selector(pageControlContinusScroll:) forControlEvents:UIControlEventTouchUpInside];
    
    [self addSubview:_pageController];
}

设置scroll的代理,更新显示

#pragma mark scrollViewDelegate
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
    _pageController.currentPage = _scrollView.contentOffset.x / ScreenWidth;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    _pageController.currentPage = _scrollView.contentOffset.x / ScreenWidth;
}

通过设置着两个代理方法,保证不论是自动滑动还是手动滑动都将会更新pagecontrol


© 著作权归作者所有

iShown
粉丝 15
博文 67
码字总数 46936
作品 0
浦东
高级程序员
私信 提问
加载中

评论(3)

iShown
iShown

引用来自“如若初见”的评论

我写的跟你基本一样,怎么实现不了呢
我自己是可以运行的,另外看到你用kvc设置pagecontroller,感觉这样更高效一点
如若初见
如若初见
我写的跟你基本一样,怎么实现不了呢
边走边唱
边走边唱
汇了款
Xamarin iOS教程之页面控件

Xamarin iOS教程之页面控件 Xamarin iOS 页面控件 在iPhone手机的主界面中,经常会看到一排小白点,那就是页面控件,如图2.44所示。它是由小白点和滚动视图组成,可以用来控制翻页。在滚动滚...

大学霸
2015/06/23
0
0
UI_07 UIScrollView、UIPageControl

⼀、UIScrollView的常⽤属性 UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容。UIScrollView是所有滚动视图的基类。 1、UIScrollView核⼼功...

黑伞将军
2015/08/24
0
0
27 款 iOS 开源库,让你的开发溜到飞起

我爱开源。 我也爱开发者们,他们花费大量宝贵的时间创造出如此惊人的东西,然后与其他人分享,而不要求任何回报。开源作者和贡献者们,你们令人敬佩。感谢你们所有的工作。 我在处理自己的 ...

oschina
2016/11/29
5.6K
6
ios 最新系统bug与解决——微信公众号中弹出键盘再收起时,原虚拟键盘位点击事件无效

最近ios发布新版本系统12.1,随着部分用户的系统更新,一些问题也渐渐暴露出来。。。 公司用户反映微信公众号出现了点击无效的bug!!测试调查发现,只有iphonex、iphone6,ihpone7等部分机型...

ZoenLeo
2018/12/06
0
0
你还在用宏定义“iphoneX”判断安全区域(safe area)吗,教你正确使用Safe Area

你还在用宏定义“iphone X”判断安全区域(safe area)吗,教你正确使用Safe Area。 iOS 7 之后苹果给 UIViewController 引入了 topLayoutGuide 和 bottomLayoutGuide 两个属性来描述不希望被透...

handclaper
2018/11/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redux

Redux概念 Redux = Reducer + Flux,数据层框架,将所有数据都存储到store中 Redux的工作流程 Antd的使用 安装npm install antd --save import 'antd/dist/antd.css'import { Input, Butto......

星闪海洋
今天
4
0
OSChina 周一乱弹 —— 你们谁看见了我的诺贝尔奖

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @脚板薯 :这么晚不睡只为找到一首歌,晚安。 ♫Say You Want Me♪ ♫Say You Want Me♪ - Augustana 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
368
17
我为什么要写微信公众号

埋一颗种子,细心呵护,静待她枝繁叶茂,葱郁参天 V2论坛上有个帖子【做程序员最重要的还是一定要有自己的作品】,作者写道: 能有一个作品和你的名字联系在一起,应当成为在职业生涯前期着意...

运维咖啡吧
今天
3
0
数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
5
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部