iOS星級(jí)評(píng)級(jí)

附上效果圖


效果圖

實(shí)現(xiàn)的功能:
1.可以自定義星星的數(shù)量(默認(rèn)為5顆星)
2.可以初始化設(shè)置星級(jí)(初始化設(shè)置星級(jí)就不能更改星級(jí))
3.實(shí)現(xiàn)了點(diǎn)擊選擇星級(jí)(不可以選擇半星)

使用:只有一個(gè)StarBarView類(lèi)添加即可

初始化默認(rèn)為5顆星星

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

初始化設(shè)置星星的數(shù)量

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

設(shè)置初始化星級(jí)

[starBarView setUpCount:5];

自定義星星的圖片

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

StarBarView.h文件內(nèi)容

#import <UIKit/UIKit.h>

@interface StarBarView : UIView

/** 當(dāng)前星級(jí) */
@property (nonatomic,assign) NSInteger count;

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

/**
 初始星級(jí)設(shè)置  如設(shè)置了?初始星級(jí)就不能再改變了

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

/**
 設(shè)置星星圖片

 @param selImage 選中的圖片
 @param norImage 沒(méi)有選中的圖片
 */
-(void)starBarSelImage:(NSString *)selImage norImage:(NSString *)norImage;

@end

StarBarView.m文件內(nèi)容

#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(@"星級(jí)大于最大星級(jí)");
        return ;
    }
    
    self.userInteractionEnabled = NO;//如設(shè)置了?初始星級(jí)就不能再改變了
    
    self.count = count;//賦值初始星級(jí)
    for (int i = 0; i < count; i++)
    {
        UIButton *starBtn = (UIButton *)[self viewWithTag:100+i];
        starBtn.selected = YES;
    }
}

@end

補(bǔ)充說(shuō)明

1.如想要初始化之后還可以點(diǎn)擊設(shè)置星級(jí)
需要-(void)setUpCount:(NSInteger)count方法中設(shè)置self.userInteractionEnabled = YES;
2.獲取當(dāng)前的星級(jí)
調(diào)用count屬性即為當(dāng)前的星級(jí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,728評(píng)論 1 14
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫(huà)全貌。在這里你可以看...
    F麥子閱讀 5,270評(píng)論 5 13
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫(huà)全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,690評(píng)論 6 30
  • iOS開(kāi)發(fā)系列--網(wǎng)絡(luò)開(kāi)發(fā) 概覽 大部分應(yīng)用程序都或多或少會(huì)牽扯到網(wǎng)絡(luò)開(kāi)發(fā),例如說(shuō)新浪微博、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 4,037評(píng)論 2 7
  • 用cocoaPods配置第三方文件 第一步。打開(kāi)終端 第二步。cd+文件夾 第三步。pod init 第四步。打開(kāi)...
    不說(shuō)謊的匹諾曹Y閱讀 1,279評(píng)論 0 1

友情鏈接更多精彩內(nèi)容