zoukankan      html  css  js  c++  java
  • 星级评价 实现

    设置评价星星

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

    [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);

    }//星星的排版

                     

  • 相关阅读:
    超级楼梯
    超级楼梯
    母牛的故事
    母牛的故事
    蟠桃记
    蟠桃记
    Children’s Queue
    Children’s Queue
    http://202.194.116.8/webapps/portal/frameset.jsp?tab_id=_2_1&url=%2fwebapps%2fblackboard%2fexecute%2
    Matlab位运算笔记
  • 原文地址:https://www.cnblogs.com/meixian/p/5371135.html
Copyright © 2011-2022 走看看