重写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. - (void)updateDots;
  3. @end

  4. @implementation MyPageControl  // 实现部分

  5. @synthesize imagePageStateNormal;
  6. @synthesize imagePageStateHighlighted;

  7. - (id)initWithFrame:(CGRect)frame { // 初始化
  8.     self = [super initWithFrame:frame];
  9.     return self;
  10. }

  11. - (void)setImagePageStateNormal:(UIImage *)image {  // 设置正常状态点按钮的图片
  12.     [imagePageStateHighlighted release];
  13.     imagePageStateHighlighted = [image retain];
  14.     [self updateDots];
  15. }

  16. - (void)setImagePageStateHighlighted:(UIImage *)image { // 设置高亮状态点按钮图片
  17.     [imagePageStateNormal release];
  18.     imagePageStateNormal = [image retain];
  19.     [self updateDots];
  20. }

  21. - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { // 点击事件
  22.     [super endTrackingWithTouch:touch withEvent:event];
  23.     [self updateDots];
  24. }

  25. - (void)updateDots { // 更新显示所有的点按钮

  26.     if (imagePageStateNormal || imagePageStateHighlighted)
  27.     {
  28.         NSArray *subview = self.subviews;  // 获取所有子视图
  29.         for (NSInteger i = 0; i < [subview count]; i++)
  30.         {
  31.             UIImageView *dot = [subview objectAtIndex:i];  // 以下不解释, 看了基本明白
  32.             dot.image = self.currentPage == i ? imagePageStateNormal : imagePageStateHighlighted;
  33.         }
  34.     }
  35. }

  36. - (void)dealloc { // 释放内存
  37.     [imagePageStateNormal release], imagePageStateNormal = nil;
  38.     [imagePageStateHighlighted release], imagePageStateHighlighted = nil;
  39.     [super dealloc];
  40. }

  41. @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];

你可能感兴趣的:(重写UIPageControl实现自定义按钮)