iOS评分用星星展示(可滑动设置评分)

这两天项目有个需求是用户评价分数(0-5)用星星多少来展示

自己自定义了一个UIView控件来显示,代码如下:

.h文件:

@class ZPMyStarShow;

/** *  星级评分条代理 */

@protocol ZPMyStarShowDelegate/**

*  评分改变

*  @param ratingBar 评分控件

*  @param newRating 评分值

*/

- (void)ratingBar:(ZPMyStarShow *)ratingBar ratingChanged:(float)newRating;

@end


以上是代理方法

@interface ZPMyStarShow : UIView

/** *  初始化设置未选中图片、半选中图片、全选中图片,以及评分值改变的代理(可以用 *  Block)实现 *

* @param deselectedName  未选中图片名称 

*  @param halfSelectedName 半选中图片名称

 *  @param fullSelectedName 全选中图片名称 

*  @param delegate          代理 */

        - (void)setImageDeselected:(NSString *)deselectedName halfSelected:(NSString *)halfSelectedName fullSelected:(NSString *)fullSelectedName andDelegate:(id)delegate;

/**

*  是否是指示器,如果是指示器,就不能滑动了,只显示结果,不是指示器的话就能滑动修改值


*  默认为NO

*/

@property (nonatomic,assign) BOOL isIndicator;

/**

*  当前应显示的星星数

*  默认设置是0

*/

@property (assign, nonatomic) CGFloat starRating;

.m文件:

@interface ZPMyStarShow (){    

        float _lastRating;        

        float height;   

       float width;        

       UIImage *unSelectedImage;    

       UIImage *halfSelectedImage;    

       UIImage *fullSelectedImage;

}

@property (nonatomic,strong) UIImageView *s1;

@property (nonatomic,strong) UIImageView *s2;

@property (nonatomic,strong) UIImageView *s3;

@property (nonatomic,strong) UIImageView *s4;

@property (nonatomic,strong) UIImageView *s5;

@property (nonatomic,weak) id delegate;

@end

@implementation ZPMyStarShow

/**

 *  初始化设置未选中图片、半选中图片、全选中图片,以及评分值改变的代理(可以用 *  Block)实现  

*  @param deselectedName  未选中图片名称 

*  @param halfSelectedName 半选中图片名称 

*  @param fullSelectedName 全选中图片名称 *  

@param delegate          代理 

*/

-(void)setImageDeselected:(NSString *)deselectedName halfSelected:(NSString *)halfSelectedName fullSelected:(NSString *)fullSelectedName andDelegate:(id)delegate{

        self.delegate = delegate;

        unSelectedImage = [UIImage imageNamed:deselectedName];

        halfSelectedImage = halfSelectedName == nil ? unSelectedImage : [UIImage imageNamed:halfSelectedName];

        fullSelectedImage = [UIImage imageNamed:fullSelectedName];

       height = 0.0,width = 0.0;

       if (height < [fullSelectedImage size].height) {

               height = [fullSelectedImage size].height;

        }

       if (height < [halfSelectedImage size].height) {

              height = [halfSelectedImage size].height;

       }

      if (height < [unSelectedImage size].height) {

             height = [unSelectedImage size].height;

      }

      if (width < [fullSelectedImage size].width) {

           width = [fullSelectedImage size].width;

      }

      if (width < [halfSelectedImage size].width) {

             width = [halfSelectedImage size].width;

      }

       if (width < [unSelectedImage size].width) {

              width = [unSelectedImage size].width;

       }

       _s1 = [[UIImageView alloc] initWithImage:unSelectedImage];

       _s2 = [[UIImageView alloc] initWithImage:unSelectedImage];

       _s3 = [[UIImageView alloc] initWithImage:unSelectedImage];

      _s4 = [[UIImageView alloc] initWithImage:unSelectedImage];

      _s5 = [[UIImageView alloc] initWithImage:unSelectedImage];

       [_s1 setFrame:CGRectMake(0,        0, width, height)];

      [_s2 setFrame:CGRectMake(width,    0, width, height)];

      [_s3 setFrame:CGRectMake(2 * width, 0, width, height)];

      [_s4 setFrame:CGRectMake(3 * width, 0, width, height)];

      [_s5 setFrame:CGRectMake(4 * width, 0, width, height)];

      [_s1 setUserInteractionEnabled:NO];

       [_s2 setUserInteractionEnabled:NO];

        [_s3 setUserInteractionEnabled:NO];

       [_s4 setUserInteractionEnabled:NO];

      [_s5 setUserInteractionEnabled:NO];

       [self addSubview:_s1];

       [self addSubview:_s2];

       [self addSubview:_s3];

       [self addSubview:_s4];

       [self addSubview:_s5];

       CGRect frame = [self frame];

       frame.size.width = width * 5;

       frame.size.height = height;

       [self setFrame:frame];

       _starRating = 0.0;

       _lastRating = 0.0;

}

//外部传入评分值

-(void)setStarRating:(CGFloat)starRating{

        _starRating = starRating;

        _lastRating = starRating;

        [self displayRating:starRating];  

}

/**

*  设置评分值,显示相应的星星

*  @param rating 评分值

*/

-(void)displayRating:(float)rating{

         [_s1 setImage:unSelectedImage];

         [_s2 setImage:unSelectedImage];

        [_s3 setImage:unSelectedImage];

        [_s4 setImage:unSelectedImage];

        [_s5 setImage:unSelectedImage];

        if (rating >= 0.5) {

                [_s1 setImage:halfSelectedImage];

        }

        if (rating >= 1) {

               [_s1 setImage:fullSelectedImage];

       }

       if (rating >= 1.5) {

              [_s2 setImage:halfSelectedImage];

       }

      if (rating >= 2) {

               [_s2 setImage:fullSelectedImage];

      }

      if (rating >= 2.5) {

              [_s3 setImage:halfSelectedImage];

      }

      if (rating >= 3) {

              [_s3 setImage:fullSelectedImage];

      }

      if (rating >= 3.5) {

              [_s4 setImage:halfSelectedImage];

       }

       if (rating >= 4) {

              [_s4 setImage:fullSelectedImage];

       }

       if (rating >= 4.5) {

             [_s5 setImage:halfSelectedImage];

       }

      if (rating >= 5) {

             [_s5 setImage:fullSelectedImage];

      }

      if ([self respondsToSelector:@selector(ratingBar:ratingChanged:)]) {

            [_delegate ratingBar:self ratingChanged:rating];

       }

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

            [super touchesBegan:touches withEvent:event];

}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

           [super touchesEnded:touches withEvent:event];

}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

          if (self.isIndicator) {

                 return;

         }

        CGPoint point = [[touches anyObject] locationInView:self];

         int newRating = (int) (point.x / width) + 1;

         if (newRating > 5)

                 return;

           if (point.x < 0) {

                 newRating = 0;

            }

           if (newRating != _lastRating){

                 [self displayRating:newRating];

           }

}

直接拷贝.h和.m文件就可以使用,- (void)setImageDeselected:(NSString *)deselectedName halfSelected:(NSString *)halfSelectedName fullSelected:(NSString *)fullSelectedName andDelegate:(id)delegate,在此方法里设置显示星星的图片和代理,然后设置isIndicator的值为YES,则只是显示器,不能滑动改变星星显示,默认值是NO,设置starRating为2.0,则显示两个点亮的星星,默认值是0.0,即不显示点亮的星星.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容