0

0

在iOS里实现高性能的评分控件

php中世界最好的语言

php中世界最好的语言

发布时间:2018-03-26 14:05:11

|

2124人浏览过

|

来源于php中文网

原创

这次给大家带来在iOS里实现高性能的评分控件,在iOS里实现高性能评分控件的注意事项有哪些,下面就是实战案例,一起来看一下。

前言

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

实现方案:

  • 大神自己写个通用空间(在时间充足的情况下)

  • 网上找个比较好的第三方 (时间比较紧凑的情况下)

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

思考:功能是实现了,但是性能好像有点受影响。具体原因要看第三方框架的实现原理,当然了也有做的很好的。我是个性能控,当我拿到这个需求的时候,也尝试用一些第三方,但结果不尽人意。最后XWStarView就此产生了。

XWStarView(高性能星星控件)

推荐理由:

  • 简单易用

  • 高性能,采用yyLabel异步绘制

  • 支持自定义星星样式,间距

局限性:

  • 目前只支持半星,一星评分

  • 目前只支持图片

  • 依赖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的爱好者不错的选择哦,如果满足你的业务需求,性能方面会让你很满意的,不信你就试试(哈哈,调皮了)。当然了萝卜青菜各有所爱,不喜勿喷。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

H5的存储方式详解

黄城网络办公系统
黄城网络办公系统

具有功能全面实用、安全性稳定性高、易操作、管理维护简单的特点,采用独创的智能型技术,web服务器、数据库和应用程序全部自动傻瓜安装配置,用户可在一分钟内自行安装完毕,无需专业人员即可自行维护,B/S结构,适用于Intranet/Internet应用,客户端只需浏览器便可连接办公系统,无论出差旅行,还是居家办公,工作都能得心应手,实现无地域限制的全球办公,具有邮件管理、业务管理、网络硬盘、智能工作流

下载

H5如何使用约束验证API

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

84

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

24

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

56

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

26

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 8.8万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Django 教程
Django 教程

共28课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号