在開(kāi)發(fā)中我們經(jīng)常需要實(shí)現(xiàn)評(píng)價(jià)星級(jí)的功能,這里分享一個(gè)評(píng)星效果的實(shí)現(xiàn)過(guò)程。
效果:

Demo地址:https://github.com/JerryLMJ/LMJGradeStarsControl
如果此demo幫助到你,請(qǐng)賜給一顆star,你的鼓勵(lì)是我coding的動(dòng)力
具體實(shí)現(xiàn):
@implementation LMJGradeStarsControl
{
NSInteger _defaultIndex;
NSInteger _totalStars;
CGFloat _size;
NSMutableArray * _starsBtnArr;
}
- (id)initWithFrame:(CGRect)frame totalStars:(NSInteger)totalStars starSize:(CGFloat)size{
self = [self initWithFrame:frame defaultSelectedStatIndex:(LMJGradeStarsControlStartIndex-1) totalStars:totalStars starSize:size];
return self;
}
- (id)initWithFrame:(CGRect)frame defaultSelectedStatIndex:(NSInteger)index totalStars:(NSInteger)totalStars starSize:(CGFloat)size{
self = [super initWithFrame:frame];
_defaultIndex = index;
_totalStars = totalStars;
_size = size;
if (self) {
_starsBtnArr = [NSMutableArray array];
[self buildStars];
}
return self;
}
- (void)buildStars{
CGFloat starDistance = self.frame.size.width / (_totalStars +1);
int i = 0;
for (int index = LMJGradeStarsControlStartIndex; index < (LMJGradeStarsControlStartIndex +_totalStars); index++) {
UIButton * starBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[starBtn setFrame:CGRectMake(0, 0, _size +10, _size +10)];
[starBtn setCenter:CGPointMake(starDistance * (i+1), self.frame.size.height/2)];
[starBtn setBackgroundColor:[UIColor clearColor]];
if (index <= _defaultIndex) {
[starBtn setImage:[UIImage imageNamed:@"star_on"] forState:UIControlStateNormal];
[starBtn setImage:[UIImage imageNamed:@"star_on"] forState:UIControlStateHighlighted];
}else{
[starBtn setImage:[UIImage imageNamed:@"star_off"] forState:UIControlStateNormal];
[starBtn setImage:[UIImage imageNamed:@"star_off"] forState:UIControlStateHighlighted];
}
[starBtn setImageEdgeInsets:UIEdgeInsetsMake(5, 5, 5, 5)];
[starBtn setTag:index];
[starBtn setHighlighted:NO];
[starBtn addTarget:self action:@selector(clickStarBtn:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:starBtn];
[_starsBtnArr addObject:starBtn];
i++;
}
}
- (void)clickStarBtn:(UIButton *)button{
[self clickStarBtnActionWithBtnTag:button.tag];
}
- (void)clickStarBtnActionWithBtnTag:(NSInteger)tag{
for (int i = 0; i < _starsBtnArr.count; i++) {
UIButton * btn = _starsBtnArr[i];
if (btn.tag <= tag) {
[btn setImage:[UIImage imageNamed:@"star_on"] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:@"star_on"] forState:UIControlStateHighlighted];;
}else{
[btn setImage:[UIImage imageNamed:@"star_off"] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:@"star_off"] forState:UIControlStateHighlighted];
}
}
if ([self.delegate respondsToSelector:@selector(gradeStarsControl:selectedStars:)]) {
[self.delegate gradeStarsControl:self selectedStars:(tag)];
}
}
- (void)setSelectedStarIndex:(NSUInteger)index{
[self clickStarBtnActionWithBtnTag:index];
}
Demo地址:
https://github.com/JerryLMJ/LMJGradeStarsControl
如果此demo幫助到你,請(qǐng)賜給一顆star,你的鼓勵(lì)是我coding的動(dòng)力
版權(quán)聲明:出自MajorLMJ技術(shù)博客的原創(chuàng)作品 ,轉(zhuǎn)載時(shí)必須注明出處及相應(yīng)鏈接!