重写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.    

  5.    @implementation MyPageControl  // 实现部分
  6.    

  7.    @synthesize imagePageStateNormal;
  8.    @synthesize imagePageStateHighlighted;
  9.    

  10.   - (id)initWithFrame:(CGRect)frame { // 初始化
  11.       self = [super initWithFrame:frame];
  12.       return self;
  13.   }
  14.   

  15.   - (void)setImagePageStateNormal:(UIImage *)image {  // 设置正常状态点按钮的图片
  16.       [imagePageStateHighlighted release];
  17.       imagePageStateHighlighted = [image retain];
  18.       [self updateDots];
  19.   }
  20.   

  21.   - (void)setImagePageStateHighlighted:(UIImage *)image { // 设置高亮状态点按钮图片
  22.       [imagePageStateNormal release];
  23.       imagePageStateNormal = [image retain];
  24.       [self updateDots];
  25.   }
  26.   

  27.   - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { // 点击事件
  28.       [super endTrackingWithTouch:touch withEvent:event];
  29.       [self updateDots];
  30.   }
  31.   

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

  34.       if (imagePageStateNormal || imagePageStateHighlighted)
  35.       {
  36.           NSArray *subview = self.subviews;  // 获取所有子视图
  37.           for (NSInteger i = 0; i < [subview count]; i++)
  38.           {
  39.               UIImageView *dot = [subview objectAtIndex:i];  // 以下不解释, 看了基本明白
  40.               dot.image = self.currentPage == i ? imagePageStateNormal : imagePageStateHighlighted;
  41.           }
  42.       }
  43.   }
  44.   

  45.   - (void)dealloc { // 释放内存
  46.       [imagePageStateNormal release], imagePageStateNormal = nil;
  47.       [imagePageStateHighlighted release], imagePageStateHighlighted = nil;
  48.       [super dealloc];
  49.   }
  50.   

  51.   @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];
复制代码



搞定~

 

 

 

發現個問題,如果直接做setCurrentPage的話,圖片就會失效了,所以覆寫setCurrentPage
  1. // 覆寫setCurrentPage
  2. - (void)setCurrentPage:(NSInteger)currentPage
  3. {
  4.     [super setCurrentPage:currentPage];
  5.     [self updateDots];
  6. }
复制代码
這樣就ok了~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值