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星级评级

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