iOS星级评级

作者: 遛遛食 | 来源:发表于2017-08-09 17:05 被阅读75次

附上效果图


效果图

实现的功能:
1.可以自定义星星的数量(默认为5颗星)
2.可以初始化设置星级(初始化设置星级就不能更改星级)
3.实现了点击选择星级(不可以选择半星)

使用:只有一个StarBarView类添加即可

初始化默认为5颗星星

StarBarView *starBarView = [[StarBarView alloc]init];
starBarView.frame = CGRectMake(10, 600, 300, 60);
[self.view addSubview:starBarView];

初始化设置星星的数量

StarBarView *starBarView = [[StarBarView alloc]initWithFrame:CGRectMake(10, 600, 300, 60) startCount:6];
[self.view addSubview:starBarView];

设置初始化星级

[starBarView setUpCount:5];

自定义星星的图片

[starBarView starBarSelImage:@"sel" norImage:@"nol"];

StarBarView.h文件内容

#import <UIKit/UIKit.h>

@interface StarBarView : UIView

/** 当前星级 */
@property (nonatomic,assign) NSInteger count;

/** 初始化 */
-(instancetype)initWithFrame:(CGRect)frame startCount:(NSInteger)startCount;

/**
 初始星级设置  如设置了�初始星级就不能再改变了

 @param count 初始星级
 */
-(void)setUpCount:(NSInteger)count;

/**
 设置星星图片

 @param selImage 选中的图片
 @param norImage 没有选中的图片
 */
-(void)starBarSelImage:(NSString *)selImage norImage:(NSString *)norImage;

@end

StarBarView.m文件内容

#import "StarBarView.h"

#define kviewS self.frame.size

@interface StarBarView ()

@property (nonatomic,assign) NSInteger startCount;

@end

@implementation StarBarView


-(instancetype)initWithFrame:(CGRect)frame startCount:(NSInteger)startCount{
    self.startCount = startCount;
    return [self initWithFrame:frame];
}

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor lightGrayColor];
        
        if (self.startCount == 0) {
            self.startCount = 5;
        }
        
        for (int i = 0; i < self.startCount; i++) {
            UIButton *starBtn = [[UIButton alloc]init];
            [starBtn setImage:[UIImage imageNamed:@"star_nor"] forState:UIControlStateNormal];
            [starBtn setImage:[UIImage imageNamed:@"star_sel"] forState:UIControlStateSelected];
            starBtn.userInteractionEnabled = NO;
            starBtn.tag = 100 + i;
            [self addSubview:starBtn];
        }
    }
    return self;
}

-(void)starBarSelImage:(NSString *)selImage norImage:(NSString *)norImage
{
    for (int i = 0; i < self.startCount; i++) {
        UIButton *starBtn = (UIButton *)[self viewWithTag:100+i];
        [starBtn setImage:[UIImage imageNamed:selImage] forState:UIControlStateNormal];
        [starBtn setImage:[UIImage imageNamed:norImage] forState:UIControlStateSelected];
    }
}

-(void)layoutSubviews
{
    [super layoutSubviews];
    
    CGFloat starBtnW = kviewS.width / self.startCount;
    CGFloat starBtnH = kviewS.height;
    for (int i = 0; i < self.startCount; i++)
    {
        UIButton *starBtn = (UIButton *)[self viewWithTag:100+i];
        starBtn.frame = CGRectMake(i*starBtnW, 0, starBtnW, starBtnH);
    }
    
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    for (int i = 0; i < self.startCount; i++)
    {
        UIButton *starBtn = (UIButton *)[self viewWithTag:100+i];
        starBtn.selected = NO;
    }
    
    CGPoint point = [[touches anyObject] locationInView:self];
    CGFloat starBtnW = kviewS.width / self.startCount;
    
    self.count = (int)(point.x/starBtnW + 1);
    for (int i = 0; i < self.count; i++)
    {
        UIButton *starBtn = (UIButton *)[self viewWithTag:100+i];
        starBtn.selected = YES;
    }
}

-(void)setUpCount:(NSInteger)count
{
    if (count > self.startCount) {
        NSLog(@"星级大于最大星级");
        return ;
    }
    
    self.userInteractionEnabled = NO;//如设置了�初始星级就不能再改变了
    
    self.count = count;//赋值初始星级
    for (int i = 0; i < count; i++)
    {
        UIButton *starBtn = (UIButton *)[self viewWithTag:100+i];
        starBtn.selected = YES;
    }
}

@end

补充说明

1.如想要初始化之后还可以点击设置星级
需要-(void)setUpCount:(NSInteger)count方法中设置self.userInteractionEnabled = YES;
2.获取当前的星级
调用count属性即为当前的星级

相关文章

  • iOS星级评级

    附上效果图 实现的功能:1.可以自定义星星的数量(默认为5颗星)2.可以初始化设置星级(初始化设置星级就不能更改星...

  • 为什么这家集团旗下所有酒店都获五星评级?

    你知道——在今年《福布斯旅游指南》年度星级评级名单上,哪家酒店集团旗下所有酒店皆获五星级评呢? 在这份五星级、四星...

  • 星星评分控件TQStarRatingView揭秘!(一)

    今天为大家带来一个iOS星级评分控件的实现,欢迎拍砖。 在github上搜索iOS星级评分控件,可以看到TQSta...

  • 简书评·《图说世界格局》

    书名:《图说世界格局》 作者:王伟 类型:政治军事—政治 评级:★★★☆(个人向,个人分级共五个星级) 观感: 1...

  • iOS星星评级

    最近项目需要写类似货物5星评价,所以就写一下。具体的样子如下。 下面主要介绍一下主要代码 下面是.m 具体代码衔接...

  • iOS - 评价星级

    1.通过xib布局,添加五个按钮,并设置tag值: 2.关联属性,将五个按钮放入同个数组中: 3.按钮添加点击事件:

  • 在米其林三星餐厅能吃到什么?

    1926年《米其林指南》开始将获得优良评价的旅馆和餐厅给以星号标记。 到了1931年,它正式启用了3个星级的评级体...

  • Human Interface Guidelines——Rati

    尝试阅读《Human Interface Guidelines》原文翻译学习iOS设计指南。 评分和评级可以帮助用...

  • 读书笔记·《变身随录》

    书名:《变身随录》 作者:黄粱一梦梦凡尘 类型:小说类 都市言情 重生变嫁 评级:三星级(个人向,个人分级共五个星...

  • iOS应用内评分

    iOS应用内评分 SKStoreReviewController 控制向用户请求应用商店评级和评论的过程的对象An...

网友评论

    本文标题:iOS星级评级

    本文链接:https://www.haomeiwen.com/subject/bbdqrxtx.html