UIPageControl 圆点背景图片的自定义实现

来源:互联网 发布:淘宝卖家怎么分析数据 编辑:程序博客网 时间:2024/04/29 19:57

 iPhone开发UIPageControl实现定义按钮是本文要介绍的内容,主要讲解的是来实现自定义按钮,有时候UIPageControl需要用到白色背景,那么会导致上面的点按钮看不见或不清楚,我们可以通过继承该类重写函数来更换点按钮图片现实  。

  实现思路如下.

  新建类继承UIPageControl :

  1.  @interface MyPageControl : UIPageControl   
  2. {   
  3.     UIImage *imagePageStateNormal;   
  4.     UIImage *imagePageStateHighlighted;   
  5. }   
  6. - (id)initWithFrame:(CGRect)frame;   
  7. @property (nonatomic, retain) UIImage *imagePageStateNormal;   
  8. @property (nonatomic, retain) UIImage *imagePageStateHighlighted;   
  9. @end  

  声明初始化该类的函数

  用了两个UIImage保存两张图片, 大家知道的, UIPageCotrol的按钮分为两态, 一个是正常, 一个是高亮

  接下来实现该类以及重写父类方法:

  1.  @interface MyPageControl(private)  // 声明一个私有方法, 该方法不允许对象直接使用   
  2.  
  3. - (void)updateDots;   
  4. @end   
  5. @implementation MyPageControl  // 实现部分   
  6. @synthesize imagePageStateNormal;   
  7. @synthesize imagePageStateHighlighted;   
  8. - (id)initWithFrame:(CGRect)frame { // 初始化   
  9.     self = [super initWithFrame:frame];   
  10.     return self;   
  11. }   
  12. - (void)setImagePageStateNormal:(UIImage *)image {  // 设置正常状态点按钮的图片   
  13.     [imagePageStateHighlighted release];   
  14.     imagePageStateHighlighted = [image retain];   
  15.     [self updateDots];   
  16. }   
  17. - (void)setImagePageStateHighlighted:(UIImage *)image { // 设置高亮状态点按钮图片   
  18.     [imagePageStateNormal release];   
  19.     imagePageStateNormal = [image retain];   
  20.     [self updateDots];   
  21. }   
  22. - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { // 点击事件   
  23.     [super endTrackingWithTouch:touch withEvent:event];   
  24.     [self updateDots];   
  25. }   
  26. - (void)updateDots { // 更新显示所有的点按钮   
  27.     if (imagePageStateNormal || imagePageStateHighlighted)   
  28.     {   
  29.         NSArray *subview = self.subviews;  // 获取所有子视图   
  30.         for (NSInteger i = 0; i < [subview count]; i++)   
  31.         {   
  32.             UIImageView *dot = [subview objectAtIndex:i];  // 以下不解释, 看了基本明白   
  33.             dot.image = self.currentPage == i ? imagePageStateNormal : imagePageStateHighlighted;   
  34.         }   
  35.     }   
  36. }   
  37. - (void)dealloc { // 释放内存   
  38.     [imagePageStateNormal release], imagePageStateNormal = nil;   
  39.     [imagePageStateHighlighted release], imagePageStateHighlighted = nil;   
  40.     [super dealloc];   
  41. }   
  42. @end  

  OK, 在添加处加入以下来实例化该对象代码:

  1. MyPageControl *pageControl = [[MyPageControl alloc] initWithFrame:CGRectMake(0,0, 200, 30)];   
  2. pageControl.backgroundColor = [UIColor clearColor];   
  3. pageControl.numberOfPages = 5;   
  4. pageControl.currentPage = 0;   
  5. [pageControl setImagePageStateNormal:[UIImage imageNamed:@"pageControlStateNormal.png"]];   
  6. [pageControl setImagePageStateHighlighted:[UIImage imageNamed:@"pageControlStateHighlighted.png"]];   
  7. [self.view addSubview:pageControl];   
  8. [pageControl release]; 
0 0
原创粉丝点击