附上效果图
效果图
实现的功能:
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属性即为当前的星级
网友评论