有时候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. 006医疗项目-模块一:用户的查找:2.用户表查询的mapper映射的文件

    前一篇文章已经把sql语句写好了并且在PL/SQL上调试过了,是可以的.这篇文章是写对应的mapper.xml, 第一步我们先通过逆向工程去构建每个表的mapper.xml文件和pojo类.这个我们在 ...

  2. 求时间差的sql语句。 比如如下数据

    msisdn createtime closetime138 2011-5-17 15:30:00:000 2011-5-17 15:30:00:530138 2011-5-17 15:40:00:0 ...

  3. 数据库SQL优化大总结之 百万级数据库优化方案(转)

    1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  4. HMAC-MD5算法原理及实现

    以下是分析节选,对于更详细的描述可以查阅RFC2104文档.     HMAC需要一个加密用散列函数(表示为H)和一个密钥K. 假设H是一个将数据块用一个基本的迭代压缩函数来加密的散列函数. 用B来表 ...

  5. [CareerCup] 7.5 A Line Cut Two Squares in Half 平均分割两个正方形的直线

    7.5 Given two squares on a two-dimensional plane, find a line that would cut these two squares in ha ...

  6. 如何自定义FloatingActionButton的大小

    Google最近为了让开发者更好的更规范的应用Material Design设计思想,特意放出了android support design library,里面含有更多Material Design ...

  7. 删除 windows 下 node_modules 过深的目录

    本文同步自我的个人博客:http://www.52cik.com/2015/11/13/node-modules-del.html 说到 node 的模块,确实既好用又蛋疼.相信无数人吐槽 node_ ...

  8. java之hashCode

    package com.simope.myTest; import java.util.HashMap; import java.util.Map; public class Test20151022 ...

  9. Java集合类: Set、List、Map、Queue使用场景梳理

    本文主要关注Java编程中涉及到的各种集合类,以及它们的使用场景 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E ...

  10. Android图片浏览器之缩略图

    项目源码:http://files.cnblogs.com/files/tgyf/app.rar. 最近在自学Android,尝试实现一般手机上都存在的图片浏览器,从缩略图开始. 直接上图,这是goo ...