iOS星级评级

附上效果图


效果图

实现的功能:
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属性即为当前的星级

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,579评论 1 14
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,158评论 5 13
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,608评论 6 30
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,756评论 2 7
  • 用cocoaPods配置第三方文件 第一步。打开终端 第二步。cd+文件夹 第三步。pod init 第四步。打开...
    不说谎的匹诺曹Y阅读 1,151评论 0 1