自定义UIPageControl,可修改任何属性,简单粗暴

来源:互联网 发布:淘宝开放平台api 编辑:程序博客网 时间:2024/06/05 12:49

    最近项目开发有需求是用到自定义的UIPageControl,添加自己的图片而不是系统自带单调的白色和灰色小圆点

一开始根据网上很多人说的做法,http://www.cnblogs.com/wengzilin/p/3210331.html的做法,直接导致程序崩溃!!!

原因很简单

-(void) updateDots13 {14     for (int i = 0; i < [self.subviews count]; i++)15     {16         UIImageView* dot = [self.subviews objectAtIndex:i];17         if (i == self.currentPage) dot.image = activeImage;18         else dot.image = inactiveImage;19     }20 }

这个方法里面,继承UIPageControl 的self.subviews并不是UIImageView,而是uiview。。。。

setimage的时候当然会崩溃了。。。

还有就是http://code4app.com/ios/SMPageControl/507e30146803fa2705000000 这个,虽然达到要求并且好像很强大的样子,但这个貌似太复杂了,不好理解,还是果断弃用了

最后是根据某个论坛有人写的代码(找不到网址了)修改得到下面简单而方便又实用的方式:不继承UIPageControl,也不继承UIControl,直接用uiview实现,简单粗暴就是爽!!!:

MyPageControl.h

#import<UIKit/UIKit.h>

@interface MyPageControl :UIView

@property (nonatomic,assign)int numberOfPages;

@property (nonatomic,assign)int currentPage;

@property (nonatomic,assign)float PointSize;   //指示图标的长和宽

@property (nonatomic,assign)float distanceOfPoint; //间隔距离

@property (nonatomic,assign)UIColor *currentPagePointColor;  //暂时没用

@property (nonatomic,assign)UIColor *pagePointColor;         //暂时没用

@property (nonatomic,retain)NSString *inactiveImage;   //激活状态图片

@property (nonatomic,retain)NSString *activeImage;     //未激活状态图片


-(float)sizeForNumberOfPages:(NSInteger)pages;

-(void)setNumberOfPages:(NSInteger)pages;

-(void)setCurrentPage:(NSInteger)page;

@end


.m

#import"MyPageControl.h"

@implementation MyPageControl

@synthesize currentPage =_currentPage;

@synthesize numberOfPages =_numberOfPages;


- (id)initWithFrame:(CGRect)frame

{

   self = [superinitWithFrame:frame];

   if (self) {

       // Initialization code

    }

   return self;

}


-(float)sizeForNumberOfPages:(NSInteger)pages{

   return _distanceOfPoint*(pages+1) +_PointSize*pages;

}


-(void) setNumberOfPages:(NSInteger)pages{

   for (int i =0; i < pages; i++) {

       UIImageView * pointImageView = [[UIImageViewalloc] initWithFrame:CGRectMake(_distanceOfPoint +(_distanceOfPoint+_PointSize)*i, (self.frame.size.height-_PointSize)/2,_PointSize, _PointSize)];

        pointImageView.image=[UIImageimageNamed:self.inactiveImage];

        [selfaddSubview:pointImageView];

    }

}


- (void) setCurrentPage:(NSInteger)page {

   int countOfPages = [self.subviewscount];

    

   for (NSUInteger subviewIndex =0; subviewIndex < countOfPages; subviewIndex++) {

       UIImageView* subview = [self.subviewsobjectAtIndex:subviewIndex];

       if (subviewIndex == page) {

            subview.image = [UIImageimageNamed:self.activeImage];

        }else{

            subview.image = [UIImageimageNamed:self.inactiveImage];

        }

    }

}

@end


调用时也特别简单,但要注意的是,设置下面的几个属性的时候,不能调换顺序,具体原因,看程序便懂。。。

MyPageControl *pageControl = [[MyPageControlalloc] initWithFrame:CGRectMake(viewWitdh/3, viewHeight-60, viewWitdh/3, 30)];

    pageControl.inactiveImage=@"inactiveImage";

    pageControl.activeImage  =@"activeImage";

    pageControl.PointSize=24;

    pageControl.distanceOfPoint=10;

    [pageControlsetNumberOfPages:3];

    pageControl.currentPage =0;

    //以上几个属性不能调换顺序设置,不然有问题

    [self.windowaddSubview:pageControl];

这样就可以随便根据inactiveImage和activeImage两个属性改成你想要的两种任意图片了。。。。。




0 0
原创粉丝点击