1 IDSStarsScoreView 的实现效果
 
 
2 类的封装方法:
 
<声明文件>
 
//
//  IDSStarsScoreView.h
//  Near
//
//  Created by levi.duan on 2017/10/23.
//  Copyright © 2017年 Near. All rights reserved.
//
 
#import <UIKit/UIKit.h>
 
@classIDSStarsScoreView;
 
@protocol IDSStarsScoreViewDelegate<NSObject>
 
/**
 评分视图点击回调
 
 @param starsView 评分视图
 @param score 所选分数
 */
- (void)startsScoreView:(IDSStarsScoreView *)starsView didSelectedScore:(CGFloat)score;
 
@end
 
@interface IDSStarsScoreView : UIView
 
// 星星是否可以点击
@property (nonatomic, assign) BOOL clickTheStar;
 
@property (nonatomic, weak) id<IDSStarsScoreViewDelegate> delegate;
 
/*
 * size :图像size
 * margin :两个星星的间距
 * score :显示的星星数
 */
- (instancetype)initWithStarSize:(CGSize)size margin:(CGFloat)margin score:(CGFloat)starNum;
 
/*
 * starNum :显示的星星数
 */
- (void)startInitWithScore:(CGFloat)starNum;
 
/*
 * 获取当前视图评分
 */
- (CGFloat)getCurrentSocore;
 
@end
 
 
<实现文件>
 
//
//  IDSStarsScoreView.m
//  Near
//
//  Created by levi.duan on 2017/10/23.
//  Copyright © 2017年 Near. All rights reserved.
//
 
#import "IDSStarsScoreView.h"
 
@interfaceIDSStarsScoreView ()
 
@property (nonatomic, strong) NSMutableArray *starImageViewArray;
 
@property (nonatomic, assign) CGFloat stores;
 
@end
 
@implementation IDSStarsScoreView
 
 
- (instancetype)initWithStarSize:(CGSize)size margin:(CGFloat)margin score:(CGFloat)starNum
{
    CGRect frame = CGRectMake(0, 0, size.width*5 + margin*4, size.height);
    _stores = starNum;
    _clickTheStar = NO;
    if (self = [superinitWithFrame:frame]) {
        [selfinitWithViewWithTheSize:size margin:margin];
    }
    returnself;
}
 
 
- (void)initWithViewWithTheSize:(CGSize)starSize margin:(CGFloat)starMargin
{
    _starImageViewArray = [[NSMutableArrayalloc] init];
    UIImageView *imageView;
    CGFloat starNum = _stores;
    for (int i=0; i<5; ++i) {
        if (starNum > 0.5) {
            imageView = [[UIImageViewalloc] initWithImage:[UIImageimageNamed:@"ic_yiqiwan_star1"]];
        }
        elseif (starNum > 0){
            imageView = [[UIImageViewalloc] initWithImage:[UIImageimageNamed:@"ic_yiqiwan_star3"]];
        }
        else {
            imageView = [[UIImageViewalloc] initWithImage:[UIImageimageNamed:@"ic_yiqiwan_star2"]];
        }
        imageView.frame = CGRectMake(self.bounds.origin.x+(i*starSize.width+i*starMargin), 0, starSize.width, starSize.height);
        [selfaddSubview:imageView];
        [_starImageViewArrayaddObject:imageView];
        --starNum;
    }
}
 
- (void)startInitWithScore:(CGFloat)starNum
{
    _stores = starNum;
    UIImageView *imageView;
    for (int i=0; i<5; ++i) {
        imageView = _starImageViewArray[i];
        if (starNum > 0.5) {
            imageView.image = [UIImageimageNamed:@"ic_yiqiwan_star1"];
        }
        elseif (starNum > 0){
            imageView.image = [UIImageimageNamed:@"ic_yiqiwan_star3"];
        }
        else {
            imageView.image = [UIImageimageNamed:@"ic_yiqiwan_star2"];
        }
        --starNum;
    }
}
 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (!_clickTheStar) {
        return;
    }
    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self];
    UIImageView *imageView ;
    _stores = 0;
    for(int i=0; i<5; ++i){
        imageView = _starImageViewArray[i];
        if ((touchPoint.x > 0) && (touchPoint.x < self.bounds.size.width) && (touchPoint.y > 0) && (touchPoint.y < self.bounds.size.height)) {
            if (imageView.frame.origin.x <= touchPoint.x) {
                ++_stores;
                imageView.image = [UIImageimageNamed:@"ic_yiqiwan_star1"];
            }
            else{
                imageView.image = [UIImageimageNamed:@"ic_yiqiwan_star2"];
            }
        }
    }
    if ([self.delegaterespondsToSelector:@selector(startsScoreView:didSelectedScore:)]) {
        [self.delegatestartsScoreView:selfdidSelectedScore:_stores];
    }
}
 
- (CGFloat)getCurrentSocore
{
    return_stores;
}
 
@end
 
 
声明方法如下:
 
- (IDSStarsScoreView *)starsView
{
    if (!_starsView) {
        if (IS_IPHONE_5 || IS_IPHONE_4_OR_LESS) {
            _starsView = [[IDSStarsScoreViewalloc] initWithStarSize:CGSizeMake(12,12)  margin:0.5score:4.0];
        }
        else {
            _starsView = [[IDSStarsScoreViewalloc] initWithStarSize:CGSizeMake(13,13)  margin:2score:4.0];
        }
        _starsView.frame = CGRectMake(CGRectGetMinX(self.scoreLabel.frame)-_starsView.frame.size.width-3, 0, _starsView.frame.size.width, _starsView.frame.size.height);
        _starsView.centerY = self.scoreLabel.centerY;
    }
    return_starsView;
}
 
数据联调用法如下:
 
if (!IS_NS_STRING_EMPTY(model.gameInfo.score)) {
    _scoreLabel.text = model.gameInfo.score;
    [_scoreLabel sizeToFit];
    _scoreLabel.frame = CGRectMake(self.bounds.size.width-10-_scoreLabel.contentSize.width,99, _scoreLabel.contentSize.width, _scoreLabel.contentSize.height);
    _scoreLabel.centerY = self.soundImageView.centerY;
    [_starsView startInitWithScore:model.gameInfo.score.floatValue];
}
 
 
 
- OVER

星星的模块封装类 IDSStarsScoreView的更多相关文章

  1. 性别年龄的模块封装类 IDSGenderLeviNamedView

    1 IDSGenderLeviNamedView 的实现效果     2 类的封装方法:   IDSGenderLeviNamedView.h   @interface IDSGenderLeviNa ...

  2. 开源日志系统 log4c 使用心得+总结

    http://blog.csdn.net/sky_qing/article/details/7208645 一.安装: 我看网上好多人介绍log4c安装的时候都说有两个步骤:先下载expat安装包并安 ...

  3. 解析大型.NET ERP系统 设计异常处理模块

    异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性.下面从我理解的角度,谈谈异常处理的方方面面.我的设计仅仅限定于Windows Forms,供参考. 1 定义异常类型 . ...

  4. c#生成静态html文件,封装类

    由于这段时间比较轻松,于是想到很多的企业网站,新闻网站需要将页面静态化,于是写了个封装类来实现静态文件的生成,思路比较简单,但未完善,网友可根据自己的思路将此类扩展,运用了简单工厂模式(本来刚开始看设 ...

  5. C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系

    我们在开发微信相关的应用的时候,一般需要完善的基础模块支持,包括微信公众号,微信企业号,以及一些业务模块的支持,一般随着功能的增多,我们需要非常清晰的界定他们的关系.模块的分拆以及合并往往需要考虑的代 ...

  6. StackExchange.Redis 访问封装类

    最近需要在C#中使用Redis,在Redis的官网找到了ServiceStack.Redis,最后在测试的时候发现这是个坑,4.0已上已经收费,后面只好找到3系列的最终版本,最后测试发现还是有BUG或 ...

  7. python几个重要的模块备忘

    一:模块使用方法 二:时间模块time 三:系统接口模块os和sys 四:数据保存的几个模块json,pickle,xml,configparse 五:数据复制移动模块shutil 六:日志模块log ...

  8. Android之手机向导以及设置中心模块的开发

    当我们使用的新的软件的时候,我们首先需要教用户如何使用我们的软件,当用户学习完使用教程,下次再登录的时候,我们应该直接跳到我们的功能界面,下面我来展示一下我学习视频做的效果图:手机防盗这个功能模块就是 ...

  9. 第九章:Javascript类和模块

    (过年了,祝大家新年好!) 第6章详细介绍了javascript对象,每个javascript对象都是一个属性集合,相互之间没有任何联系.在javascript中也可以定义对象的类,让每个对象都共享某 ...

随机推荐

  1. RabbitMq核心概念和术语

    简介 越来越多的消息中间件很容易让人产生混淆,在学习一种消息中间件的时候,最好先了解他的几种抽象概念,方便你理解,明白了这些概念,你学习起来的时候也就得心应手,同时也是使用好RabbitMQ的基础. ...

  2. WPF封装控件时 检测是否在设计模式中

    原文:WPF封装控件时 检测是否在设计模式中 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Vblegend_2013/article/detail ...

  3. 移动浏览器Chrome 32 for Android移除300ms点击推迟

    在手机浏览器的一篇文章翻译300ms延迟实用文章,原文地址  http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away 去掉移动设 ...

  4. OpenGL(十五) OpenCV+OpenGL实现水面倒影

    有两幅原始图片,一个是景物图像,一个是水面图像,尝试生成景物在水中的倒影: 在OpenGL中,加载并显示这个景物图像可以把这个图像作为纹理载入即可,把图像直接选择180度的效果就相当于是在镜面中倒影的 ...

  5. 基于Android开发的天气预报app(源码下载)

    原文:基于Android开发的天气预报app(源码下载) 基于AndroidStudio环境开发的天气app -系统总体介绍:本天气app使用AndroidStudio这个IDE工具在Windows1 ...

  6. [AC自己主动机+可能性dp] hdu 3689 Infinite monkey theorem

    意甲冠军: 给n快报,和m频率. 然后进入n字母出现的概率 然后给目标字符串str 然后问m概率倍的目标字符串是敲数量. 思维: AC自己主动机+可能性dp简单的问题. 首先建立trie图,然后就是状 ...

  7. DataGridTemplateColumn

    DataGridTemplateColumn自定义单元格样式 <DataGrid Grid.Row="0" Name="BasicRuleDataGrid" ...

  8. CentOS 7.3最小系统安装KVM

    一.准备工作 安装wget和vim yum install -y wget vim 修改yum源为阿里源 wget -O /etc/yum.repos.d/CentOS-Base.repo http: ...

  9. 终端开发补充 : 读 curses模块官方文档...

    curses是一个提供终端屏幕打印和键盘处理的库, 我个人的理解就是终端里的gui(当然它是基于文本的)... 写2048的时候用到了这个库, 所以现在过来好好研究一下这个库... 下面是文档内容 : ...

  10. 两种加载dll的方式

    通过链接lib文件加载dll的话,使用过程中没法动态切换 通过loadlibrary函数动态加载的话,可以动态切换