iOS星星评分两种方式

作者: 戴上耳机__世界与我无关 | 来源:发表于2016-11-09 19:50 被阅读140次

样式1

星星样式1.png
  • 我们要做的就是图片上的5颗星星
  1. 根据分数判断我们该添加什么样式的星星
 - (void)setLevel:(CGFloat)level{
 _level = level;
    //1.满星  
    NSInteger fullStarCount = (NSInteger)level;
    for (NSInteger i = 0; i < fullStarCount; i++) {
        //添加满星
        [self makeStarViewWithImageName:@"full_star" startPosition:i];
        
    }
    //2.半星   
    if (level - fullStarCount) {
        
        [self makeStarViewWithImageName:@"half_star" startPosition:fullStarCount];
        //统计星星目前个数(满星+半星)
        fullStarCount ++;
    }
     //3.空星
     for (NSInteger i = fullStarCount; i < kStartCount ; i++) {
        [self makeStarViewWithImageName:@"empty_star"  startPosition:i];
    }
 } 
 


2.根据位置设置设置图片

- (void)makeStarViewWithImageName:(NSString *)imageName startPosition:(NSInteger) position{
    
    //如果重新设置评分,会重新创建imageView 需要判断 若已经存在5个imageView不去创建
    UIImageView *imageView = nil;
    if (self.subviews.count == kStartCount) {
        
        imageView = self.subviews[position];
        imageView.image = [UIImage imageNamed:imageName];
        
        return;
    }
    
    imageView = [[UIImageView alloc]init];
    imageView.image = [UIImage imageNamed:imageName];
    [imageView sizeToFit];
    imageView.frame = CGRectOffset(imageView.bounds, imageView.bounds.size.width * position, 0);
    [self addSubview:imageView];
    
}


3 .如果不判断会出现下面的情况


bug.png

样式2

样式2.gif
  • 本想通过循环创建5个imageView 但实现不了预期效果

1.加载xib 偷懒~
loadNibNamed: owner: options:
这个方法加载xib会把xib文件加载入缓存 不建议使用

+ (instancetype)loadStarView{
    UINib *nib = [UINib nibWithNibName:@"XHStarView" bundle:nil];
    XHStarView *starView = [[nib instantiateWithOwner:nil options:nil]lastObject];
    return starView;
}

2 .判断是否添加星星

@implementation XHStarView{
    BOOL _isAddStar;
}

3 . 判断点击的区域 (可以根据具体情况设置)


-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self];
    if((point.x > self.starOne.x && point.x < (self.starFive.x + self.starFive.width))&&(point.y > self.starOne.y && point.y< self.height)){
        _isAddStar = YES;
        
    }else{
        _isAddStar = NO;
    }
}

4 .移动的时候添加星星

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    
    if(_isAddStar){
        UITouch *touch = [touches anyObject];
        CGPoint point = [touch locationInView:self];
        [self setStarForegroundViewWithPoint:point];

    }

    return;
}

5 .结束的时候禁止添加星星

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    if(_isAddStar){
        UITouch *touch = [touches anyObject];
        CGPoint point = [touch locationInView:self];
        [self setStarForegroundViewWithPoint:point];
    }
    _isAddStar = NO;
    return;
}

6 . 根据点击的位置x设置图片 并设置满星 1 分 半星0.5 空星0

-(CGFloat)changeImg:(float)x image:(UIImageView*)img{
    if(x > img.x + img.width/2){
        [img setImage:[UIImage imageNamed:@"StarSelected"]];
        return 1;
    }else if(x > img.x){
        [img setImage:[UIImage imageNamed:@"StarSelectHeaf"]];
        return 0.5;
    }else{
        [img setImage:[UIImage imageNamed:@"StarUnSelect"]];
        return 0;
    }
}

7 . 得出分数

-(void)setStarForegroundViewWithPoint:(CGPoint)point{

    self.score = 0;
    self.score = self.score + [self changeImg:point.x image:self.starOne];
    self.score = self.score + [self changeImg:point.x image:self.starTwo];
    self.score = self.score + [self changeImg:point.x image:self.starThree];
    self.score = self.score + [self changeImg:point.x image:self.starFour];
    self.score = self.score + [self changeImg:point.x image:self.starFive];
    
    //评论最少半星
    if(self.score == 0){
        self.score = 0.5;
        [self.starOne setImage:[UIImage imageNamed:@"StarSelectHeaf"]];
    }
    NSLog(@"分数 %f",self.score);
}

把得出的分数传给第一个demo就行了

代码链接

还有不足欢迎指教交流

相关文章

  • iOS星星评分两种方式

    样式1 我们要做的就是图片上的5颗星星 根据分数判断我们该添加什么样式的星星 2.根据位置设置设置图片 3 .如...

  • iOS 星星评分控件

    简单的自用星星控件,有空再加上手势 星星的间距取的是星星的宽度的五分之一,view的宽度等于五个星星加上四个空隙 ...

  • LBStarView 星星iOS评分

    效果图 Github : https://github.com/LeonLeeboy/LBStarView 只需要...

  • 评分功能

    iOS系统中没有自带的星星评分功能,需要自己封装。星星评分功能是整个工程的一个需求,但是代码的封装则是一个代码功底...

  • iOS评分星星允许半颗

    你的喜欢是我的坚持的动力! .m如下 .h如下 如何使用呢?一句话

  • iOS之星星评分(一)

    今天我们说的第一种评分,是不可以点击评分的。 也就是说星星点亮的多少不是我们手动点击的,而是服务器返回一个数字,然...

  • iOS之星星评分(二)

    首先我们创建一个基于UIView的类,就叫YYStarView吧。在YYStarView.h文件中我们写下如下代码...

  • iOS - 仿淘宝星星评分

    前言: 最近项目中做商城,涉及到订单评价,评分的问题,网上参考了别人的一些资料,然后封装了一套可以实现评分功能的方...

  • ios-提示星星评分

  • iOS APP评分方式

    1.跳出应用,跳转到AppStore,进行评分 如果是7.0以前的系统 NSString *str = [NSSt...

网友评论

本文标题:iOS星星评分两种方式

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