iOS 7定制UIPageControl遇到的问题
先说下ios7之前 那些点点的实现非常简单 就是UIPageControl.subviews 就是一个个点的UIImageView 所以只需简单的替换掉就好了代码如下:@property(nonatomic,strong)UIImage *_activeImage;
@property(nonatomic,strong)UIImage *_inactiveImage;
//在init的时候把你自己定义的两张图片搞进去
- (void)updateDots
{
for (int i = 0; i< [self.subviews count]; i++) {
UIImageView* dot =[self.subviews objectAtIndex:i];
if (i == self.currentPage) {
if ([dot respondsToSelector:@selector(setImage:)]) {
dot.image=_activeImage;
}
} else {
if ([dot respondsToSelector:@selector(setImage:)]) {
dot.image=_inactiveImage;
}
}
}
}
//然后自己重载一下setNumber就好了
- (void)setNumberOfPages:(NSInteger)numberOfPages
{
[super setNumberOfPages:numberOfPages];
[self updateDots];
} ios7改掉了连底层实现……整个pagecontrol 的subviews是UIView乱七八糟……而且都是view根本就没了image属性、
所以照样使用ios7之前的定制图片pagecontrol点的方法会出错。 解决方法:就要重写UIView的绘画函数了代码大致如下
#import "ZDPageControll.h"
#import <QuartzCore/QuartzCore.h>
@interface ZDPageControll()
{
UIImage *_activeImage;
UIImage *_inactiveImage;
NSArray *_usedToRetainOriginalSubview;
}
@end
@implementation ZDPageControll
@synthesize kSpacing=_kSpacing;
- (id)initWithFrame:(CGRect)frame currentImageName:(NSString *)current commonImageName:(NSString *)common
{
self= [super initWithFrame:frame];
if ([self respondsToSelector:@selector(setCurrentPageIndicatorTintColor:)] && [self respondsToSelector:@selector(setPageIndicatorTintColor:)]) {
[self setCurrentPageIndicatorTintColor:[UIColor clearColor]];
[self setPageIndicatorTintColor:[UIColor clearColor]];
}
[self setBackgroundColor:[UIColor clearColor]];
_activeImage= [UIImage imageNamed:current];
_inactiveImage= [UIImage imageNamed:common];
_kSpacing=10.0f;
//hold住原来pagecontroll的subview
_usedToRetainOriginalSubview=[NSArray arrayWithArray:self.subviews];
for (UIView *su in self.subviews) {
[su removeFromSuperview];
}
self.contentMode=UIViewContentModeRedraw;
return self;
}
-(void)dealloc
{
//释放原来hold住的那些subview
_usedToRetainOriginalSubview=nil;
_activeImage=nil;
_inactiveImage=nil;
}
- (void)updateDots
{
for (int i = 0; i< [self.subviews count]; i++) {
UIImageView* dot =[self.subviews objectAtIndex:i];
if (i == self.currentPage) {
if ([dot respondsToSelector:@selector(setImage:)]) {
dot.image=_activeImage;
}
} else {
if ([dot respondsToSelector:@selector(setImage:)]) {
dot.image=_inactiveImage;
}
}
}
}
- (void)setCurrentPage:(NSInteger)currentPage
{
[super setCurrentPage:currentPage];
if ([[[UIDevice currentDevice]systemVersion]floatValue] <=6.0) {
[self updateDots];
}
// [self updateDots];
[self setNeedsDisplay];
}
- (void)setNumberOfPages:(NSInteger)numberOfPages
{
[super setNumberOfPages:numberOfPages];
if ([[[UIDevice currentDevice]systemVersion]floatValue] <=6.0) {
[self updateDots];
}
// [self updateDots];
[self setNeedsDisplay];
}
-(void)drawRect:(CGRect)iRect
{
if ([kIphoneVersionfloatValue]>=7.0){//加个判断
int i;
CGRect rect;
UIImage *image;
iRect = self.bounds;
if ( self.opaque ) {
[self.backgroundColor set];
UIRectFill( iRect );
}
if ( self.hidesForSinglePage && self.numberOfPages == 1 ) return;
rect.size.height = _activeImage.size.height;
rect.size.width = self.numberOfPages * _activeImage.size.width + ( self.numberOfPages - 1 ) * _kSpacing;
rect.origin.x = floorf( ( iRect.size.width - rect.size.width ) / 2.0 );
rect.origin.y = floorf( ( iRect.size.height - rect.size.height ) / 2.0 );
rect.size.width = _activeImage.size.width;
for ( i = 0; i < self.numberOfPages; ++i ) {
image = i == self.currentPage ? _activeImage : _inactiveImage;
[image drawInRect: rect];
rect.origin.x += _activeImage.size.width + _kSpacing;
}
}else {
}
}
@end
iOS 7定制UIPageControl遇到的问题的更多相关文章
- iOS开发-定制多样式二维码
iOS开发-定制多样式二维码 二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常 ...
- iOS拍照定制之AVCaptureVideoDataOutput
问题 领导看了前面做的拍照,问了句"哪来的声音", "系统的,自带的,你看系统的拍照也有声音" "有办法能去掉吗?挺糟心的" "我 ...
- iOS拍照定制之AVCapturePhotoOutput
问题 领导安排任务,写个拍照功能,界面跟系统拍照有点出入 拍完照片,底部显示已拍照片,有个拍照上限[在此不论] 点击已拍照片,可以预览.放大缩小查看 思路 系统拍照肯定不行了,只能定制,没提是否拍照禁 ...
- iOS— UIScrollView和 UIPageControl之间的那些事
本代码主要实现在固定的位置滑动图片可以切换. 目录图如下: ViewController.h #import <UIKit/UIKit.h> // 通过宏定义定义宽和高 #define W ...
- iOS自定制tabbar与系统的tabbar冲突,造成第一次点击各个item图片更换选中,第二次选中部分item图片不改变
可以选择是使用自定制的还是系统的,如果使用自定制的,就使用以下方法即可隐藏系统的uitabbarButton,从而使item恢复正确 //隐藏UITabBarButton -(void)viewWil ...
- iOS之定制tabbar
我们知道,一个Tab控制器控制着若干视图控制器,它是由一个数组进行管理的,每一个Tab控制器只有一 UITabBar视图,用于显示UITabBarItem实例.我们通过点击UITabBarItem来切 ...
- iOS关于定制某个控件四个角是否为圆角
UIView *myView=[[UIView alloc]initWithFrame:CGRectMake(50, 70, 200, 200)]; UIBezierPath * bezierPath ...
- iOS:定制自适应大小的透明吐司弹框
一.简单介绍 创建一个吐司消息的黑色透明弹框,可以根据消息长短自适应大小. 可以手动创建手动显示手动关闭,也可以手动创建自动显示自动关闭. 简单好用. 二.代码使用 .h文件 // // LiveHU ...
- iOS开发——定制圆形头像与照相机图库的使用
如今的App都很流行圆形的头像,比方QQ右上角的头像,今日头条的头像等等.这已经成为App设计的趋势了.今天我们就来简单实现一下这个功能,我还会把从手机拍照中或者图库中取出作为头像的照片存储到应用程序 ...
随机推荐
- 一个Java应用,三种字体风格(Java, Windows, Mac),真是蛋疼
大家看看下面这张图,红色圈起来的是Java难看至极的字体渲染,黄色圈起来的是正常的Windows渲染,绿色是Mac风格的渲染. 其实我感觉正常风格就挺好的,就是看那个Java的Swing菜单,非常不顺 ...
- 自旋锁-SpinLock(.NET 4.0+)
短时间锁定的情况下,自旋锁(spinlock)更快.(因为自旋锁本质上不会让线程休眠,而是一直循环尝试对资源访问,直到可用.所以自旋锁线程被阻塞时,不进行线程上下文切换,而是空转等待.对于多核CPU而 ...
- Java程序员的日常 —— static的用法讲解实践
之前文章说过Java中static的作用,有朋友想看个例子.于是便抽空写了个小栗子 代码 package xing.test.thinking.chap5; class A{ public A() { ...
- iOS开发-友盟分享(1)
1.集成友盟分享,需要先注册一个友盟账号,注册地址 友盟开发者平台官网 友盟集成文档 友盟sdk下载地址友盟sdk下载地址 2,成功下载sdk集成后,微信分享需要配置一下 新浪微博 之类到同样配置就 ...
- jquery实现返回基部案例效果
<!doctype html> <html> <head> <meta charset="gb2312"> <title> ...
- C# keybd_event模拟对照表以及用法.
Windows提供了一个模拟键盘API函数Keybd_event(),该函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM_KEYUP消息. [DllImport("use ...
- ubuntu下取代ping的好工具tcpping
$ sudo apt-get install tcptraceroute bc$ cd /usr/bin$ sudo wget http://www.vdberg.org/~richard/tcppi ...
- 在WPF中使用字体图标
一.源码描述 这是一款基于WPF窗体应用程序的字体图标示例源码, 该源码简单易懂使用于初学者和实战项目应用, 感兴趣的朋友们可以下载看看哦. 二.功能介绍 1.用ICO字体代替 ...
- BW基于ALE的主数据增量机制分析
1 概述 前段时间在项目中碰到一个问题,地点物料0MAT_PLANT_ATTR属性主数据因为有两个多月没有做增量更新,导致在之后的每次增量抽取活动中因为抽取的数据量过大使得在源系统的进程中发生 ...
- SQL的主键和外键约束
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...