星级评价 实现

设置评价星星

  字体的大小适合布局的大小

[Lable名  sizeToFit];

.h

typedef enum kRatingViewStyle

{

    kSmallStyle = 0,

    kNormalStyle = 1

 

}kRatingViewStyle;

 

@interface RatingView : UIView

{

 @private

    UIView *_baseView;//透明的承载yellowStar的图层

    NSMutableArray *_yellowStarArray;

    NSMutableArray *_grayStarArray;

    UILabel *_ratingLable;

    CGFloat  _ratingScore;

}

 

@property(nonatomic,assign)kRatingViewStyle style;

 

@property(nonatomic,assign)CGFloat ratingScore;

.m

#define  kNormalWidth 35

#define  kNormalHeight 33

 

#define  kSmallWidth  15

#define  kSmallHeight  14

 

#define  kBaseViewWidth 10

 

#define  kNormalFontSize 25

 

#define  kSmallFontSize  12

初始化的时候调用:

- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

        [self initGrayStar];

        [self initYellowStar];

        [self ratingLable];

     

    }

    return self;

 

}

几星的布局是根据:

1.设置为灰色星星的层

 

-(void)initGrayStar

{

    _grayStarArray = [[NSMutableArray alloc] initWithCapacity:5];

    for (int index = 0; index < 5; index++) {

        UIImageView * crayStar = [[UIImageView alloc] initWithFrame:CGRectZero];

        crayStar.image = [UIImage imageNamed:@"gray"];

        [self addSubview: crayStar];

        [crayStar release];

        

        [_grayStarArray addObject:crayStar];

    }

 

 

}//灰色星星的初始化

2.设置黄色星星的层,并设置一个透明层,用来放置黄色的星星,然后用clipsToBounds UIView的属性 这会把多余的截掉

 

-(void)initYellowStar

{

    _baseView = [[UIView alloc] initWithFrame:CGRectZero];

    _baseView.backgroundColor = [UIColor clearColor];

    _baseView.clipsToBounds = YES;

    [self addSubview:_baseView];

   

    _yellowStarArray = [[NSMutableArray alloc] initWithCapacity:5];

    for (int index = 0; index < 5; index++) {

        UIImageView *yellowStar = [[UIImageView alloc] initWithFrame:CGRectZero];

        yellowStar.image = [UIImage imageNamed:@"yellow"];

        [_baseView addSubview: yellowStar];

        [yellowStar release];

        

        [_yellowStarArray addObject:yellowStar];

    }

 

}//黄色星星的初始化和透明层的初始化(_baseView 与 yellowStar)

3.设置RatingLable 的比率框

-(void)ratingLable

{

    _ratingLable = [[UILabel alloc] initWithFrame:CGRectZero];

    _ratingLable.backgroundColor = [UIColor clearColor];

    _ratingLable.textColor  = [UIColor purpleColor];

    [self addSubview:_ratingLable];

    

 

}//-_atingLable评分框的初始化

4.在设置全局的RatingScore,用来接收和设置Rating 的样式

-(void)setRatingScore:(CGFloat)ratingScore

{

    _ratingScore = ratingScore;

    

    _ratingLable.text = [NSString stringWithFormat:@"%0.1f",_ratingScore];

    

 

}//设置评分的大小,赋值给_ratingLable

 

5.layoutSubviews 来布局

-(void)layoutSubviews

{

    [super layoutSubviews];

    int width = 0;

    for (int index = 0; index < 5; index++) {

        UIView *yellowStar = _yellowStarArray[index];

        UIView *grayStar   = _grayStarArray[index];

        if (self.style == kSmallStyle) {

            yellowStar.frame = CGRectMake(0+width , 0 , kSmallWidth, kSmallHeight);

            grayStar.frame   = CGRectMake(0+width, 0, kSmallWidth, kSmallHeight);

            

            width +=kSmallWidth;

            

        }else{

            yellowStar.frame = CGRectMake(0+width , 0 , kNormalWidth, kNormalHeight);

            grayStar.frame   = CGRectMake(0+width, 0, kNormalWidth, kNormalHeight);

            

            width +=kNormalWidth;

        }

        }//将两种星星排成一行

    float baseViewWidth = 0;

    baseViewWidth = self.ratingScore / kBaseViewWidth *width;

    

    float height = 0;

    if (self.style == kSmallStyle) {

        _baseView.frame = CGRectMake(0, 0, baseViewWidth, kSmallHeight);

        _ratingLable.font = [UIFont boldSystemFontOfSize:kSmallFontSize];

        height = kSmallHeight;

        

    }else

    {

        _baseView.frame = CGRectMake(0, 0, baseViewWidth, kNormalHeight);

        _ratingLable.font = [UIFont boldSystemFontOfSize:kNormalFontSize];

        height = kNormalHeight;

    }//设置——baseView的两种不同样式的大小,——ratingLable的字体大小

    

    //设置ratingLable 的大小和位置

    _ratingLable.frame = CGRectMake(width, 0, 0, 0);

    [_ratingLable sizeToFit];

  

    //整体的大小和位置

    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, width+_ratingLable.frame.size.width, height);

}//星星的排版

                 

转载于:https://www.cnblogs.com/meixian/p/5371135.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值