有时候UIPageControl需要用到白色的背景, 那么会导致上面的点按钮看不见或不清楚,
我们可以通过继承该类重写函数来更换点按钮的图片现实.
实现思路如下.
新建类继承UIPageControl :
   @interface MyPageControl : UIPageControl
   {
       UIImage *imagePageStateNormal;
       UIImage *imagePageStateHighlighted;
   }
   - (id)initWithFrame:(CGRect)frame;
   @property (nonatomic, retain) UIImage *imagePageStateNormal;
   @property (nonatomic, retain) UIImage *imagePageStateHighlighted;
   @end
复制代码
 
声明了初始化该类的函数
用了两个UIIma
 
接下来实现该类以及重写父类方法:
   @interface MyPageControl(private)  // 声明一个私有方法, 该方法不允许对象直接使用
   - (void)updateDots;
   @end
 
   @implementation MyPageControl  // 实现部分
 
   @synthesize imagePageStateNormal;
   @synthesize imagePageStateHighlighted;
 
  - (id)initWithFrame:(CGRect)frame { // 初始化
      self = [super initWithFrame:frame];
      return self;
  }
 
  - (void)setImagePageStateNormal:(UIImage *)image {  // 设置正常状态点按钮的图片
      [imagePageStateHighlighted release];
      imagePageStateHighlighted = [image retain];
      [self updateDots];
  }
 
  - (void)setImagePageStateHighlighted:(UIImage *)image { // 设置高亮状态点按钮图片
      [imagePageStateNormal release];
      imagePageStateNormal = [image retain];
      [self updateDots];
  }
 
  - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { // 点击事件
      [super endTrackingWithTouch:touch withEvent:event];
      [self updateDots];
  }
 
  - (void)updateDots { // 更新显示所有的点按钮
 
      if (imagePageStateNormal || imagePageStateHighlighted)
      {
          NSArray *subview = self.subviews;  // 获取所有子视图
          for (NSInteger i = 0; i < [subview count]; i++)
          {
              UIImageView *dot = [subview objectAtIndex:i];  // 以下不解释, 看了基本明白
              dot.image = self.currentPage == i ? imagePageStateNormal : imagePageStateHighlighted;
          }
      }
  }
 
  - (void)dealloc { // 释放内存
      [imagePageStateNormal release], imagePageStateNormal = nil;
      [imagePageStateHighlighted release], imagePageStateHighlighted = nil;
      [super dealloc];
  }
 
  @end
复制代码
 
OK, 在添加处加入以下来实例化该对象代码:
   MyPageControl *pageControl = [[MyPageControl alloc] initWithFrame:CGRectMake(0,0, 200, 30)];
   pageControl.backgroundColor = [UIColor clearColor];
   pageControl.numberOfPages = 5;
   pageControl.currentPage = 0;
   [pageControl setImagePageStateNormal:[UIImage imageNamed:@"pageControlStateNormal.png"]];
   [pageControl setImagePageStateHighlighted:[UIImage imageNamed:@"pageControlStateHighlighted.png"]];
   [self.view addSubview:pageControl];
   [pageControl release];这里有点问题在休整一下:如果直接做setCurrentPage的話,圖片就會失效了,所以覆寫setCurrentPage// 覆寫setCurrentPage
- (void)setCurrentPage:(NSInteger)currentPage
{
    [super setCurrentPage:currentPage];
    [self updateDots];

}

重写UIPageControl实现自定义按钮的更多相关文章

  1. iOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果

    一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // re ...

  2. Swift - 重写导航栏返回按钮

    // 重写导航栏返回按钮方法 func configBackBtn() -> Void { // 返回按钮 let backButton = UIButton(type: .custom) // ...

  3. wordpress优化之结合prism.js为编辑器自定义按钮转化代码

    原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...

  4. WPF自定义控件与样式(2)-自定义按钮FButton

    一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 还是先看看效果 ...

  5. Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页、搜索、格式化、自定义按钮

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  6. django xadmin 插件(3) 列表视图新增自定义按钮

    效果图: 编辑按钮是默认的list_editable属性对应的插件(xadmin.plugins.editable) 放大按钮对应的是自定义插件. 自定义按钮源码: xplugin.py(保证能够直接 ...

  7. 网站上点击自定义按钮发起QQ聊天的解决方案

    一.背景 最近由于开发需要,需要在网站上自定义一个立即交谈的按钮,现将解决方式分享给大家. 二.解决方案 1.首先访问:http://shang.qq.com/widget/consult.php,适 ...

  8. 用仿ActionScript的语法来编写html5——第七篇,自定义按钮

    第七篇,自定义按钮这次弄个简单点的,自定义按钮.其实,有了前面所定义的LSprite,LBitmap等类,定义按钮就很方便了.下面是添加按钮的代码, function gameInit(event){ ...

  9. Expression Blend制作自定义按钮(转)

    来源:http://www.cnblogs.com/iChina/archive/2011/11/25/2262854.html Expression Blend制作自定义按钮 1.从Blend工具箱 ...

随机推荐

  1. <转>如何进行code review

    转自: http://pm.readthedocs.org/zh_CN/latest/codereview/howto.html 如何进行code review? code reivew是保障代码质量 ...

  2. 经典71道Android试题及答案

    本文为开发者奉献了70道经典Android面试题加答案--重要知识点几乎都涉及到了,你还等啥,赶紧收藏吧!! 1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放 ...

  3. js原生捕鱼达人(一)

    捕鱼达人的游戏大家都很熟悉吧,接下来的两三天,我会将整个游戏的原生js写法详细的写出来,整个游戏应用了面向对象的写法:创建构造函数,在构造函数上面添加对象的属性,然后在构造函数的原型上添加方法,当然这 ...

  4. WPF在XAML中Binding使用StringFormat属性

    1. 绑定Currency, 如果没有字符的话, =后面需要先加入{}. 不加的话会出问题. 1 <TextBlock Text="{Binding Amount, StringFor ...

  5. 第五章 使用 Bootstrap Typeahead 组件(百度下拉效果)

    推荐链接:http://www.cnblogs.com/haogj/p/3376874.html UnderScore官网:http://underscorejs.org/ 参考文档:http://w ...

  6. 课程1——数据类型和变量

    声明:本系列随笔主要用于记录c语言的常备知识点,不能保证所有知识正确性,欢迎大家阅读.学习.批评.指正!!你们的鼓励是我前进的动力.严禁用于私人目的.转载请注明出处:http://www.cnblog ...

  7. [转]Linux查看物理CPU个数、核数、逻辑CPU个数

    From : http://www.cnblogs.com/emanlee/p/3587571.html # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个 ...

  8. svn命令行修改已提交的版本备注

    svn命令行修改已提交的版本备注 参考文章: stackoverflow.com/questions/304383/how-do-i-edit-a-log-message-that-i-already ...

  9. log4j输出日志乱码(转)

    log4j日志文件乱码问题的解决方法 log4j日志文件中文乱码处理方法 log4j 控制台和文件输出乱码问题解决 写在前面,第三篇文章中将原因解释的最清楚,为什么设置为UTF-8或者GBK就生效了, ...

  10. 又折腾到这么晚 , 图片Viewpager PagerIndicator,listview 和侧边栏滑动的事件处理

    代码 思路 根据坐标判断 事件是否拦截 调用 getParent().requestDisallowInterceptTouchEvent(true);方法告诉上层ViewGroup 是否拦截 返回t ...