登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

LPLevelView 类似AppStore评分等级条,支持打分手动评级

[复制链接]
来自: 李世铿 分类: iOS精品源码 上传时间: 2016-7-5 15:18:00
Tag:AppStore Slider 滑杆 评分条 星级

项目介绍:

1.支持打分手动评级,点击即可打分,同时回调打分完成block:
[Objective-C] 查看源文件 复制代码
@property (strong, nonatomic) void (^scoreBlock)(float level);



2.采用绘图渲染界面,高效流畅,可自定义图标和尺寸等:
[Objective-C] 查看源文件 复制代码
///整星图标,半星和空星尺寸以整星为准
@property (strong, nonatomic) UIImage *iconFull;
///半星图标
@property (strong, nonatomic) UIImage *iconHalf;
///空星图标
@property (strong, nonatomic) UIImage *iconEmpty;
///图片尺寸,默认为iconFull图标的尺寸,同时自适应self尺寸
@property (assign, nonatomic) CGSize iconSize;


*绘制图标到画布
[Objective-C] 查看源文件 复制代码
- (void)drawIcons
{
    //计算绘制的图标尺寸
    CGSize size = [self sizeOfIcon];
    //纵坐标
    CGFloat y = (self.bounds.size.height - size.height) / 2.l;
    //图标间距
    CGFloat spacing = (self.bounds.size.width - size.width*_maxLevel)/(CGFloat)_maxLevel;
    //横坐标
    CGFloat x = spacing/2.l;

    for (int i=1; i<=_maxLevel; i++) {
        //①获取图标
        UIImage *iconImg;
        if (i <= _level) {//整星
            iconImg = _iconFull;
        }else if (i-_level < 1 && !_levelInt) {//半星
            if (_iconHalf) iconImg = _iconHalf;
            else return;
        }else if (_iconHalf) {//空星
            iconImg = _iconEmpty;
        }

        //③绘制
        [iconImg drawInRect:CGRectMake(x, y, size.width, size.height)];

        //④横坐标右移,以便绘制下一个图标
        x += size.width + spacing;
    }
}



*计算绘制的图标尺寸
[Objective-C] 查看源文件 复制代码
- (CGSize)sizeOfIcon
{
    //最大宽度
    CGFloat width = self.bounds.size.width/(CGFloat)_maxLevel;
    width = MIN(width, _iconFull.size.width);
    if (_iconSize.width != 0) width = MIN(width, _iconSize.width);
    //宽度伸缩比
    CGFloat wScale = width / _iconFull.size.width;
    //最大高度
    CGFloat height = self.bounds.size.height;
    height = MIN(height, _iconFull.size.height);
    if (_iconSize.height != 0) height = MIN(height, _iconSize.height);
    //高度伸缩比
    CGFloat hScale = height / _iconFull.size.height;

    //实际伸缩比
    CGFloat scale = MIN(wScale, hScale);
    //实际尺寸
    CGSize size = CGSizeMake(_iconFull.size.width * scale, _iconFull.size.height * scale);
    return size;
}




3.蒙版剪切自定义图标颜色:
[Objective-C] 查看源文件 复制代码
@property (strong, nonatomic) UIColor *iconColor;


*剪切
[Objective-C] 查看源文件 复制代码
- (void)drawRect:(CGRect)rect
{
    //绘制默认图标
    if (_iconColor) {
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSaveGState(context);
        CGContextClipToMask(context, rect, [self clipPathImage]);//按蒙版图像路径剪切
        CGContextSetFillColorWithColor(context, _iconColor.CGColor);
        CGContextFillRect(context, rect);
        CGContextRestoreGState(context);
    }
    //绘制自定义图标
    else {
        [self drawIcons];//绘制
    }
}



*绘制蒙版图像,即剪切路径
[Objective-C] 查看源文件 复制代码
- (CGImageRef)clipPathImage
{
    //在内存中创建image绘制画布
    CGFloat scale = [UIScreen mainScreen].scale;//必须设置画布分辨率,否则会模糊
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, scale);
    CGContextRef imageContext = UIGraphicsGetCurrentContext();
    //翻转画布坐标系Y轴再平移坐标系原点到(0,0)位置,此处使用矩阵变换
    CGFloat transY = CGContextGetClipBoundingBox(imageContext).size.height;
    CGContextConcatCTM(imageContext, CGAffineTransformMake(1, 0, 0, -1, 0, transY));
    //绘制
    [self drawIcons];
    //提取UIImage
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    //释放该画布
    CGContextRelease(imageContext);
    UIGraphicsEndImageContext();//关闭image绘制
    return image.CGImage;
}


DEMO 直接下载:SwiftLiu



相关源码推荐:

我来说两句
*滑动验证:
所有评论(367)
ichinaapplewei 2016-7-5 21:16:42
楼主用心了,内容非常精彩。
回复
池州黄晓明 2016-7-6 10:25:30
精华内容,楼主V5!
回复
池州黄晓明 2016-7-6 10:27:10
淡定,淡定,淡定……
回复
mstimes 2016-7-6 11:48:05
楼主威武啊,Code4App有你更给力!
回复
code4app热心网友 2016-7-6 11:48:08
淡定,淡定,淡定……
回复
code4app热心网友 2016-7-6 11:48:12
强烈支持楼主ing……
回复
王颖博 2016-7-6 13:21:13
感谢分享,Code4App有你更精彩
回复
池州黄晓明 2016-7-6 14:31:48
我把你的文件导入工程,在cell里添加星时,报了内存的错误,error:object 0x166922b4: incorrect checksum for freed object - object was probably modified after being freed.求助
回复
风雷雨电 2016-7-6 16:10:17
强烈支持楼主ing……
回复
提取码:  下载次数:269 状态:已购或VIP 售价:0(原价:10)金钱 下载权限:初级码农 
3720 2 269
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表