重写UIPageControl实现自定义按钮

来源:互联网 发布:hive sql select into 编辑:程序博客网 时间:2024/05/17 07:06

重写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. @interfaceMyPageControl(private)  //声明一个私有方法, 该方法不允许对象直接使用
  2. - (void)updateDots;
  3. @end

  4. @implementationMyPageControl  //实现部分

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

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

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

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

  21. - (void)endTrackingWithTouch:(UITouch *)touchwithEvent:(UIEvent *)event { // 点击事件
  22.     [superendTrackingWithTouch:touch withEvent:event];
  23.     [selfupdateDots];
  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 = [subviewobjectAtIndex:i];  //以下不解释, 看了基本明白
  32.             dot.image= self.currentPage == i ? imagePageStateNormal :imagePageStateHighlighted;
  33.         }
  34.     }
  35. }

  36. - (void)dealloc { // 释放内存
  37.     [imagePageStateNormalrelease], imagePageStateNormal = nil;
  38.     [imagePageStateHighlightedrelease], imagePageStateHighlighted = nil;
  39.     [superdealloc];
  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:[UIImageimageNamed:@"pageControlStateNormal.png"]];
  6. [pageControl setImagePageStateHighlighted:[UIImageimageNamed:@"pageControlStateHighlighted.png"]];
  7. [self.view addSubview:pageControl];
  8. [pageControl release];