Swift基础之两种选择星星的评价样式并获取星星的索引值
想练练手,所以封装了一个两种选择星星的评价样式的Demo,并且可以获取到点击的星星的索引值,方便记录值,上传数据时使用
首先创建View类,设计初始化方法,并且用到了枚举类型和代理方法
方式一:默认的有文字的5颗星评价的样式
case .TextType://有文字样式
//计算每个星星的大小宽、高
let itemWidthF:CGFloat = viewWidthF / 5.0
let itemHeightF:CGFloat = viewHeightF / 2.0
//将小的值赋值给星星
let starWidth:CGFloat = 30.0;
let textArr:NSArray = ["很差","凑合","一般","不错","完美"]
//创建按钮和星星
for i in 0...4 {
let starImgV = UIImageView.init(frame: CGRect.init(x: (itemWidthF-starWidth)/2+itemWidthF*CGFloat(i), y: (itemHeightF-starWidth)/2, width: starWidth, height: starWidth))
starImgV.tag = i+100
starImgV.image = UIImage.init(named: "StarUnSelect")
self.addSubview(starImgV)
let butt = UIButton.init(frame: CGRect.init(x: itemWidthF*CGFloat(i), y: 0, width: itemWidthF, height: itemHeightF));
butt.tag = i+200
butt.addTarget(self, action: #selector(buttClick), for: UIControlEvents.touchUpInside)
self.addSubview(butt)
let textLabel = UILabel.init(frame: CGRect.init(x: itemWidthF*CGFloat(i), y: itemHeightF, width: itemWidthF, height: itemHeightF))
textLabel.text = textArr[i] as? String
textLabel.adjustsFontSizeToFitWidth = true
textLabel.textColor = UIColor.lightGray
textLabel.font = UIFont.systemFont(ofSize: 13)
textLabel.textAlignment = NSTextAlignment.center;
self.addSubview(textLabel)
}
break
方式二:没有文字描述的评价程度,同时要注意视图的宽高大小问题
case .NoTextType:
//无文字样式
//计算每个星星的大小宽、高
let itemWidthF:CGFloat = viewWidthF / CGFloat(aNum)
let itemHeightF:CGFloat = viewHeightF
//设置星星的大小
var starWidth:CGFloat = 0.0
if itemWidthF>30 {
//如果大于,保持大小为30
starWidth = 30
//创建按钮和星星
for i in 0...aNum-1 {
let starImgV = UIImageView.init(frame: CGRect.init(x: (itemWidthF-starWidth)/2+itemWidthF*CGFloat(i), y: (itemHeightF-starWidth)/2, width: starWidth, height: starWidth))
starImgV.tag = i+100
starImgV.image = UIImage.init(named: "StarUnSelect")
self.addSubview(starImgV)
let butt = UIButton.init(frame: CGRect.init(x: itemWidthF*CGFloat(i), y: 0, width: itemWidthF, height: itemHeightF));
butt.tag = i+200
butt.addTarget(self, action: #selector(buttClick), for: UIControlEvents.touchUpInside)
self.addSubview(butt)
}
}else{
//如果小于,判断宽、高的大小,将小的值赋值给星星
//三目运算
//starWidth = itemWidthF<itemHeightF ? itemWidthF:itemHeightF
if itemWidthF<=itemHeightF {
//如果宽小于高
starWidth = itemWidthF
//创建按钮和星星
for i in 0...aNum-1 {
let starImgV = UIImageView.init(frame: CGRect.init(x: starWidth*CGFloat(i), y: (itemHeightF-starWidth)/2, width: starWidth, height: starWidth))
starImgV.tag = i+100
starImgV.image = UIImage.init(named: "StarUnSelect")
self.addSubview(starImgV)
let butt = UIButton.init(frame: CGRect.init(x: starWidth*CGFloat(i), y: 0, width: starWidth, height: itemHeightF));
butt.tag = i+200
butt.addTarget(self, action: #selector(buttClick), for: UIControlEvents.touchUpInside)
self.addSubview(butt)
}
}else{
//如果宽大于高
starWidth = itemHeightF
//创建按钮和星星
for i in 0...aNum-1 {
let starImgV = UIImageView.init(frame: CGRect.init(x: (itemWidthF-starWidth)/2+itemWidthF*CGFloat(i), y: 0, width: starWidth, height: starWidth))
starImgV.tag = i+100
starImgV.image = UIImage.init(named: "StarUnSelect")
self.addSubview(starImgV)
let butt = UIButton.init(frame: CGRect.init(x: itemWidthF*CGFloat(i), y: 0, width: itemWidthF, height: itemHeightF));
butt.tag = i+200
butt.addTarget(self, action: #selector(buttClick), for: UIControlEvents.touchUpInside)
self.addSubview(butt)
}
}
}
break
设计代理方法,并实现
//定义协议,知道点击的哪一个
protocol BHClickMarkStarDelegate:NSObjectProtocol{
//定义一个可以记录显示的哪颗星星的方法
func clickWhichStar(bhMarkView:BHMarkStarView,indexNum:Int)
}
//实现协议方法
func clickWhichStar(bhMarkView: BHMarkStarView, indexNum: Int) {
switch bhMarkView.tag {
case 1:
print("输出的是第。。。一。。。个视图的第...\(indexNum+1)...个星星")
break
case 2:
print("输出的是第。。。二。。。个视图的第...\(indexNum+1)...个星星")
break
case 3:
print("输出的是第。。。三。。。个视图的第...\(indexNum+1)...个星星")
break
case 10:
print("输出的是第。。。四。。。个视图的第...\(indexNum+1)...个星星")
break
case 11:
print("输出的是第。。。五。。。个视图的第...\(indexNum+1)...个星星")
break
case 12:
print("输出的是第。。。六。。。个视图的第...\(indexNum+1)...个星星")
break
default:
break
}
}
效果图:(源码下载:https://github.com/hbblzjy/SwiftMarkStartDemo)
Swift基础之两种选择星星的评价样式并获取星星的索引值的更多相关文章
- 【Swfit】Swift与OC两种语法写单例的区别
Swift与OC两种语法写单例的区别 例如写一个NetworkTools的单例 (1)OC写单例 + (instancetype)sharedNetworkTools { static id inst ...
- 运算符关键字。数据区别大小写。日期范围。判空的两种写法。NOT IN的两种写法。IN范围可含NULL,但NOT IN值范围不能含NULL。
比较:>,<,=,>=,<=,<>(!=) 逻辑:AND,OR,NOT 范围:BETWEEN...AND... 范围:IN,NOT IN 判空:IS NULL, I ...
- JAVA基础之两种核心机制
突然之间需要学习Java,学校里学的东西早就忘记了,得用最短的时间把Java知识理顺,重点还是J2EE,毕竟所有的ava项目中95%都是J2EE,还是先从基础的J2SE学起吧....... 首先是了解 ...
- Thead基础及两种创建方式
今天本人给大家讲解一下多线程,如有不对的或者讲的不好的可以多多提出,我会进行相应的更改,先提前感谢提出意见的各位了!!! 说说多线程本人自己对它理解的定义:因计算机的CPU支持能够在同一时间执行多于一 ...
- iOS 获取版本号(Swift和OC两种)
iOS获取应用版本号:version OC: [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVers ...
- Swift基础之两指拉动图片变大变小
我们在使用APP的时候,有时会发现有些图片可以通过两指进行放大.缩小,今天就实现这样的一种效果,比较简单,不喜勿喷.... var imageVi:UIImageView! = nil var ...
- javascript基础之两种函数的定义方法
第一种方式:可以在函数定义之前调用也可以在函数定义之后调用: (0)函数的调用 add(,) //可以调用 (1)函数的定义: function add(x,y) { console.log(x+y) ...
- git代码回滚的两种选择
回滚到指定commit,且保持该commit之前和之后的提交记录 使用git revert命令. git revert HEAD // 回滚到前一次 commit git revert HEAD^ / ...
- [Swift]二分法的两种方式
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
随机推荐
- 《阿里巴巴 Java 开发手册》读书笔记
偶然看到阿里巴巴居然出书了???趁着满减活动(节约节约....)我赶紧买来准备看看,刚拿到的时候掂量了好多下,总觉得商家给我少发了一本书,结果打开才知道..原来这本书这么小.... 编码规范的重要性 ...
- [LeetCode] Reverse Words in a String III 翻转字符串中的单词之三
Given a string, you need to reverse the order of characters in each word within a sentence while sti ...
- python3全栈开发-什么是粘包、粘包现象、如何解决粘包
一.粘包现象 让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig) 注意注意注意: res=subprocess.Popen(cmd.decode( ...
- [Luogu 3414]SAC#1 - 组合数
Description 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 今天他萌上了组合数.现在他很想知道simga(C(n,i))是多少:其中C是组合数(即C(n,i)表示n个物品无顺序选取i个的方案 ...
- poj 1811 随机素数和大数分解(模板)
Sample Input 2 5 10 Sample Output Prime 2 模板学习: 判断是否是素数,数据很大,所以用miller,不是的话再用pollard rho分解 miller : ...
- APIO 2014
练习赛,评测的时候好像出了些问题,最后我拿自己机子测的212/300,第二题负责评测的写的SPJ就判了第一行的答案,不知道有没出什么问题. T1.palindrome 题目大意:给定一个长度为N的字符 ...
- Orz
OR: 说实话,感觉Virtual Judge挺好使的,至少到现在,Uva都没注册成功过QAQ,估计是校园网的问题 不得不说现在课越来越多,而且对于我们这种学校ACM才开展两年的来说,时间真的好有限, ...
- [BZOJ]1095 Hide捉迷藏(ZJOI2007)
一道神题,两种神做法. Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特 ...
- Mysql参数汇总
凡是需要耐心. 参数为静态参数则黄色字体标记. 参数为全局变量则粗体标记. 参数为全局.会话变量则不标记. auto_increment_increment auto_increment_offset ...
- VS2012不能加载想要打开的项目/解决方案
今天回宿舍用自己的电脑敲代码,想要打开之前的项目,可是VS2012打开之后项目却显示“无法加载” 查了之后才知道原来是由于某个安装包缺少引起的,具体做法请看如下 链接:http://jingyan.b ...