iOS星级评分效果实现

在开发中我们经常需要实现评价星级的功能,这里分享一个评星效果的实现过程。

效果:

Demo地址:https://github.com/JerryLMJ/LMJGradeStarsControl
如果此demo帮助到你,请赐给一颗star,你的鼓励是我coding的动力

具体实现:

@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帮助到你,请赐给一颗star,你的鼓励是我coding的动力

版权声明:出自MajorLMJ技术博客的原创作品 ,转载时必须注明出处及相应链接!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,523评论 25 709
  • 太长了,还是转载吧...今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源...
    庞哈哈哈12138阅读 20,352评论 3 283
  • 第一次翻开的时候,看了眼开头几页,又合上了,觉得太过枯燥。 今天再把这本书翻出来,看到数据推动人工智能发展这一节,...
    心里住了一只羊阅读 3,933评论 0 3
  • 央视国际中文频道《真功夫》节目,展示了太极拳以柔克刚、出神入化的搏击功夫,提到一个关键词:得意忘形。留得...
    王进会阅读 4,134评论 0 0
  • 昨天看班主任在群里发的要穿长袖衣服,心里还想这冷天的不会有穿短袖校服的了。昨晚看到孩子书包鼓鼓的,拉开拉链...
    李玺辰妈妈阅读 1,355评论 0 2

友情链接更多精彩内容