zoukankan      html  css  js  c++  java
  • 重写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];


    搞定~





    转自:http://www.cocoachina.com/bbs/read.php?tid-51384-page-1.html
  • 相关阅读:
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    c++ , const对象中的变量不能被修改
    C++,常成员函数
    c++,给常成员变量赋值
    C++中,引用作为函数参数
    C++中,如何定义和使用指向成员函数的指针
  • 原文地址:https://www.cnblogs.com/chen1987lei/p/2067598.html
Copyright © 2011-2022 走看看