程序猿
星星評分的核心是放置兩張星星視圖释漆,一張灰色悲没,一張黃色,灰色在下男图,黃色在上示姿,默認平鋪五顆灰色和黃色星星,然后從傳入的評分來控制黃色星星的底部視圖的寬度逊笆,而不是控制星星的樣式栈戳,黃色和灰色星星從一開始到最后都沒有變化,變化的只是放置星星的View的frame在變化难裆。
效果展示
RatingView.h
為外部使用該類提供一個屬性子檀,傳入星星的評分,供展示使用乃戈。
@property(assign,nonatomic)float rating;
RatingView.m
定義幾個屬性褂痰,寬度高度,灰色視圖View偏化,黃色視圖View脐恩。寬度和高度用來控制一個星星的frame。兩個視圖用來顯示不同的星星侦讨。
CGFloat _width;
CGFloat _height;
UIView* _grayView;
UIView* _yellowView;
通過UIColor中的一個類方法來平鋪星星視圖驶冒,我們一開始獲取只有一張圖片,現(xiàn)在獲取圖片的size*5獲取底部view的大小韵卤,然后根據(jù)給定的底圖的frame骗污,計算出倍數(shù),等比例放大或者縮小沈条。
//平鋪灰星星
_grayView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed: @"gray" ]];
[self addSubview:_grayView];
//平鋪黃星星
_yellowView.backgroundColor = [UIColor colorWithPatternImage:yellowStar];
[self addSubview:_yellowView];
//獲取倍數(shù)需忿,根據(jù)倍數(shù)擴大星星的大小
CGFloat scale = self.frame.size.width/_width;
//按照倍數(shù),放大
_grayView.transform = CGAffineTransformMakeScale(scale, scale);
_yellowView.transform = CGAffineTransformMakeScale(scale, scale);
底圖根據(jù)倍數(shù)經(jīng)過放大或者縮小后,位置放生了偏移屋厘,需要重新安置涕烧。
_grayView.frame = CGRectMake(0, 0, _grayView.frame.size.width, _grayView.frame.size.height);
_yellowView.frame = CGRectMake(0, 0, _yellowView.frame.size.width, _yellowView.frame.size.height);
最后復寫一下rating的set方法,給評分賦值汗洒,設置黃色底圖view的frame议纯。
_yellowView.frame = CGRectMake(0, 0,
_grayView.frame.size.width*rating/10.0, _grayView.frame.size.height);
ViewController.m
這里為了演示效果,循環(huán)創(chuàng)建9個視圖溢谤。
for (int i = 0; i < 9; i++)
{
RatingView *ratingV = [[RatingView alloc]initWithFrame:CGRectMake(100, 40 + 40*i, 100, 30)];
ratingV.rating = i+1;
[self.view addSubview:ratingV];
}