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
- 性别年龄的模块封装类 IDSGenderLeviNamedView
1 IDSGenderLeviNamedView 的实现效果 2 类的封装方法: IDSGenderLeviNamedView.h @interface IDSGenderLeviNa ...
- 开源日志系统 log4c 使用心得+总结
http://blog.csdn.net/sky_qing/article/details/7208645 一.安装: 我看网上好多人介绍log4c安装的时候都说有两个步骤:先下载expat安装包并安 ...
- 解析大型.NET ERP系统 设计异常处理模块
异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性.下面从我理解的角度,谈谈异常处理的方方面面.我的设计仅仅限定于Windows Forms,供参考. 1 定义异常类型 . ...
- c#生成静态html文件,封装类
由于这段时间比较轻松,于是想到很多的企业网站,新闻网站需要将页面静态化,于是写了个封装类来实现静态文件的生成,思路比较简单,但未完善,网友可根据自己的思路将此类扩展,运用了简单工厂模式(本来刚开始看设 ...
- C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系
我们在开发微信相关的应用的时候,一般需要完善的基础模块支持,包括微信公众号,微信企业号,以及一些业务模块的支持,一般随着功能的增多,我们需要非常清晰的界定他们的关系.模块的分拆以及合并往往需要考虑的代 ...
- StackExchange.Redis 访问封装类
最近需要在C#中使用Redis,在Redis的官网找到了ServiceStack.Redis,最后在测试的时候发现这是个坑,4.0已上已经收费,后面只好找到3系列的最终版本,最后测试发现还是有BUG或 ...
- python几个重要的模块备忘
一:模块使用方法 二:时间模块time 三:系统接口模块os和sys 四:数据保存的几个模块json,pickle,xml,configparse 五:数据复制移动模块shutil 六:日志模块log ...
- Android之手机向导以及设置中心模块的开发
当我们使用的新的软件的时候,我们首先需要教用户如何使用我们的软件,当用户学习完使用教程,下次再登录的时候,我们应该直接跳到我们的功能界面,下面我来展示一下我学习视频做的效果图:手机防盗这个功能模块就是 ...
- 第九章:Javascript类和模块
(过年了,祝大家新年好!) 第6章详细介绍了javascript对象,每个javascript对象都是一个属性集合,相互之间没有任何联系.在javascript中也可以定义对象的类,让每个对象都共享某 ...
随机推荐
- sublime 内容高级搜索
在发展中经常需要搜索内表面的文件.更好地想找到$video->getTitle() 在该文件中使用的表面.好了,这个时候就需要使用高级搜索功能,的操作,如以下: ctrl+shif+f纽带 例如 ...
- Light libraries是一组通用的C基础库,目标是为减少重复造轮子而写(全部用POSIX C实现)
Light libraries是一组通用的C基础库,目标是为减少重复造轮子而写实现了日志.原子操作.哈希字典.红黑树.动态库加载.线程.锁操作.配置文件.os适配层.事件驱动.工作队列.RPC.IPC ...
- Delphi2010,DelphiXE 安装控件找不到DesignIntf 解决办法
今天安装了一个可以支持IP 地址输入的edit控件,安装后可以放到窗体上,但是编译提示找不到DesignIntf,DesignEditors 从Delphi6开始,就对DesignIntf,Desig ...
- 概率论经典问题 —— 三个事件 A、B、C 独立 ≠ 三个事件两两独立
三个事件 A.B.C 相互独立?三个事件两两独立? A:第一次正面朝上: B:第二次正面朝上: C:第一次和第二次结果不同: P(AB)=P(A)P(B): P(AC)=1/4=P(A)P(C)(不是 ...
- numpy 辨异(二) —— np.identity()/np.eye()
import numpy as np; 两者在创建单位矩阵上,并无区别,两者的区别主要在接口上: np.identity(n, dtype=None):只能获取方阵,也即标准意义的单位阵: np.ey ...
- 自由WiFi软体,你也太简单了
自由WiFi市场热点,自然不用多说.支付宝钱包计划实现全民免费WiFi,360.百度.金山.小米都在着手WiFi产品. 只是.这些免费WiFi或者实现WiFi的硬件或软件.都是争夺新的市场入口,推广产 ...
- 从DOS bat启动停止SQL Server (MSSQLSERVER)服务
由于机器上装了SQL Server2008,导致机器开机变慢,没办法只能让SQL Server (MSSQLSERVER) 服务默认不启动.但是每次要使用SQL Server时就必须从控制面板-管理 ...
- linux nano 命令
linux nano一linux像pico文本编辑软件,功能少.但是,基本能满足要求
- WPF 将Bitmapsource转换到Emgu.cv.image
原文:WPF 将Bitmapsource转换到Emgu.cv.image Transform WPF BitmapSource to Emgu.CV.Image******* /// <summ ...
- pip 9.0 离线安装Python3的环境库
到客户现场实施,很多情况下是没有网络的,我们需要在办公室准备好离线安装包. 假设现有已联网的客户机A,一台无网络的客户机B 客户机A 1.生成本地环境的包清单 pip3 freeze > req ...