<span id='reywk'></span>

    <fieldset id='reywk'></fieldset>

      <code id='reywk'><strong id='reywk'></strong></code>
      <i id='reywk'></i>

      1. <tr id='reywk'><strong id='reywk'></strong><small id='reywk'></small><button id='reywk'></button><li id='reywk'><noscript id='reywk'><big id='reywk'></big><dt id='reywk'></dt></noscript></li></tr><ol id='reywk'><table id='reywk'><blockquote id='reywk'><tbody id='reywk'></tbody></blockquote></table></ol><u id='reywk'></u><kbd id='reywk'><kbd id='reywk'></kbd></kbd>
      2. <i id='reywk'><div id='reywk'><ins id='reywk'></ins></div></i>
        <dl id='reywk'></dl>

        <ins id='reywk'></ins>
          <acronym id='reywk'><em id='reywk'></em><td id='reywk'><div id='reywk'></div></td></acronym><address id='reywk'><big id='reywk'><big id='reywk'></big><legend id='reywk'></legend></big></address>

          iOS高性能简单易用的评分(星星)控件

          • 时间:
          • 浏览:116
          • 来源:124软件资讯网

            前言

            做为老司机的你们有没有遇到过这样的需求  ?每个商品或者商家的item都有个星级或者其他评分 ,或许像以下的效果图

            实现方案:

            1. 大神自己写个通用空间(在时间富足的情形下)

            2. 网上找个比力好的第三方 (时间比力紧凑的情形下)

            3. 更直接的  ,自己直接放几个ImageView或者Layer

            思索:功效是实现了 ,可是性能似乎有点受影响 。详细缘故原由要看第三方框架的实现原理  ,固然了也有做的很好的  。我是个性能控 ,当我拿到这个需求的时间 ,也实验用一些第三方  ,但效果不尽人意  。最后XWStarView就此发生了  。

            XWStarView(高性能星星控件)

            推荐理由:

            1. 简朴易用

            2. 高性能  ,接纳yyLabel异步绘制

            3. 支持自界说星星样式  ,间距

            局限性:

            1. 现在只支持半星  ,一星评分

            2. 现在只支持图片

            3. 依赖YYLabel

            XWStarMaker(外观设置)

            开发者可以设置间距  ,最大值  ,默认图片  ,选中图片

            @interface XWStarMaker : NSObject
            
            @property (nonatomic, assign) CGFloat space;
            
            @property (nonatomic, strong) NSString *defaultImage;
            
            @property (nonatomic, strong) NSString *selectImage;
            
            @property (nonatomic,assign) NSInteger maxValue;
            
            @end

            XWStarView.m(焦点代码)

            眼尖的同砚已经看到了  ,XWStarView直接继续了YYLabel,熟悉YYLaebl的开发者可能知道我要干嘛了  。

            #import "YYLabel.h"
            #import "XWStarMaker.h"
            @class XWStarView;
            
            @protocol XWStarViewDelegate @optional
            -(void)xw_starView:(XWStarView*)tagView star:(NSInteger)star;
            
            @end
            
            @interface XWStarView : YYLabel
            
            @property (nonatomic, assign) NSInteger score;
            
            @property (nonatomic,weak) id delegate;
            
            -(instancetype)initWithFrame:(CGRect)frame maker:(void (^)(XWStarMaker *))makeBlock;
            
            @end

            详细的实现细节看.m文件

            @interface XWStarView ()
            
            @property (nonatomic,strong) XWStarMaker *maker;
            
            @end
            
            @implementation XWStarView
            
            -(instancetype)initWithFrame:(CGRect)frame maker:(void (^)(XWStarMaker *))makeBlock{
                
                if (self = [super initWithFrame:frame]) {
                   
                    self.maker = [[XWStarMaker alloc] init];
                    if (makeBlock) {
                        makeBlock(self.maker);
                    }
                    self.displaysAsynchronously = YES;
                    self.fadeOnAsynchronouslyDisplay = NO;
                    [self creatScoreAttr];
                }
                return self;
            }
            #pragma mark - private
            
            -(void)creatScoreAttr{
                
                NSMutableAttributedString *text = [NSMutableAttributedString new];
                UIFont *font = [UIFont systemFontOfSize:0];
                for (int i = 0; i < self.maker.maxValue; i++) {
                    
                    UIImage *image = [UIImage imageNamed:self.maker.defaultImage];
                    NSMutableAttributedString *attachText = [NSMutableAttributedString yy_attachmentStringWithContent:image contentMode:UIViewContentModeLeft attachmentSize:CGSizeMake(image.size.width + self.maker.space, image.size.height) alignToFont:font alignment:YYTextVerticalAlignmentCenter];
            //添加点击事件
                    __weak typeof(&*self) weakSelf = self;
                    [attachText yy_setTextHighlightRange:NSMakeRange(0, 1) color:nil backgroundColor:nil tapAction:^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect){
                        
                        if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(xw_starView:star:)]) {
                            
                            [weakSelf.delegate xw_starView:weakSelf star:i];
                        } 
                    }];
                    
                    [text appendAttributedString:attachText];
                }
                self.attributedText = text;
            }
            
            -(void)setScore:(NSInteger)score{
               
                if (_score == score)
                {
                    return;
                }
                _score = score;
                //获取图片资源
                NSArray *attachments =  self.textLayout.attachments;
                for (int i = 0; i < attachments.count; i++) {
                    YYTextAttachment *attachment = attachments[i];
                    attachment.content = [UIImage imageNamed:i <= _score ? self.maker.selectImage : self.maker.defaultImage];
                }
            
            }
            @end

            只要你是个iOS法式员或许都看得懂代码吧  。实现很简朴  ,可是效果却纷歧般 ,特殊在庞大列表使用的时间很显着  。

            XWStarView使用

              _scoreView = [[XWStarView alloc] initWithFrame:CGRectMake(0, self.frame.size.height - 40, self.frame.size.width, 40) maker:^(XWStarMaker *maker){
                        
                        maker.defaultImage = @"goods_score_empt.png";
                        maker.selectImage = @"goods_score_full.png";
                        maker.space = 10;
                    }];
                    _scoreView.delegate = self;

            XWStarView是YYLabel的喜好者不错的选择哦  ,若是知足你的营业需求  ,性能方面会让你很满足的 ,不信你就试试(哈哈 ,淘气了)  。固然了萝卜青菜各有所爱  ,不喜勿喷  。

            总结

            法式员的快乐应该是天天不停的学习  ,不停的发现新工具  ,让自己不被扬弃  ,至少我是那么以为的(嘻嘻) ,你呢  ?