博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

重写UIPageControl实现自定义按钮(转)

Posted on 2011-06-02 02:01  BradyChen  阅读(2753)  评论(4编辑  收藏  举报
有时候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];


搞定~





转自:http://www.cocoachina.com/bbs/read.php?tid-51384-page-1.html