1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
//
// GMMarkStarView.m
// ZhengXing
//
// Created by Tulipa on 14-8-21.
// Copyright (c) 2014年 Wanmei Creative. All rights reserved.
//
#import "GMMarkStarView.h"
#import "UIView+Layout.h"
@interface GMMarkStarView ()
@end
@implementation GMMarkStarView{
NSMutableArray *buttons;
}
- (id)initWithUseType:(GMStarUserType)type
{
_type = type;
self = [self init];
return self;
}
- (id)init{
self = [super init];
if (self){
buttons = [[NSMutableArray alloc] initWithCapacity:5];
for (int i = 1; i < 6; i ++){
UIButton *button = [self createButton];
[self addSubview:button];
[buttons addObject:button];
button.tag = i;
}
self.isEnable = YES;
}
return self;
}
- (UIButton *)createButton{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
UIImage *normalImage;
UIImage *editImage;
UIImage *hightlighImage;
switch (_type) {
case GMStarUserTypeEdit:
//用大星星
normalImage = [UIImage imageNamed:@"star_normal"];
editImage = [UIImage imageNamed:@"star_light_new"];
hightlighImage = [UIImage imageNamed:@"star_light_new"];
button.size = CGSizeMake(18, 18);
break;
case GMStarUserTypeShow:
//用小星星
normalImage = [UIImage imageNamed:@"star_normal_small_red"];
editImage = [UIImage imageNamed:@"star_light_new_small_red"];
hightlighImage = [UIImage imageNamed:@"star_half_red"];
button.size = CGSizeMake(18, 18);
break;
case GMStarUserTypeSmallShow:
normalImage = [UIImage imageNamed:@"show_small_gray_star"];
editImage = [UIImage imageNamed:@"show_small_star"];
hightlighImage = [UIImage imageNamed:@"show_small_half_star"];
button.size = CGSizeMake(12, 12);
break;
case GMStarUserTypeTotalComment:
normalImage = [UIImage imageNamed:@"comment_total_star_normal"];
hightlighImage = [UIImage imageNamed:@"comment_total_star_selected"];
editImage = [UIImage imageNamed:@"comment_total_star_selected"];
button.size = CGSizeMake(20, 20);
break;
case GMStarUserTypeCommentDetail:
normalImage = [UIImage imageNamed:@"comment_detail_star_normal"];
hightlighImage = [UIImage imageNamed:@"comment_detail_star_selected"];
editImage = [UIImage imageNamed:@"comment_detail_star_selected"];
button.size = CGSizeMake(20, 20);
break;
default:
break;
}
[button setImage:editImage forState:UIControlStateSelected];
[button setImage:hightlighImage forState:UIControlStateHighlighted];
[button setImage:normalImage forState:UIControlStateNormal];
return button;
}
- (void)buttonClicked:(UIButton *)button{
NSInteger tag = button.tag;
if (_isEnable) {
self.mark = tag;
if (self.markChange ){
self.markChange(tag);
}
}
}
- (void)setMark:(NSInteger)tag{
_mark = tag;
[buttons enumerateObjectsUsingBlock:^(UIButton *btn, NSUInteger idx, BOOL *stop) {
[btn setSelected:btn.tag <= tag];
[btn setHighlighted:NO];
}];
}
/* 通过向上、向下取整,获取到哪个位置应该显示半颗星 */
- (void)setNumber:(float)number
{
_number = number;
float big = ceilf(number);
float small = floorf(number);
[buttons enumerateObjectsUsingBlock:^(UIButton *btn, NSUInteger idx, BOOL *stop) {
if (big != small) {
if (idx+1<=small) {
[btn setSelected:YES];
[btn setHighlighted:NO];
}else if(idx+1 == big){
[btn setSelected:NO];
[btn setHighlighted:YES];
}else{
[btn setSelected:NO];
[btn setHighlighted:NO];
}
}else{
[btn setSelected:btn.tag <= number];
[btn setHighlighted:NO];
}
}];
}
- (void)layoutSubviews{
[super layoutSubviews];
UIView *view = buttons[0];
CGFloat space = self.space==0?15:self.space;
CGFloat insert = space + view.width;
__weak __typeof(self)weakSelf = self;
[buttons enumerateObjectsUsingBlock:^(UIButton *btn, NSUInteger idx, BOOL *stop) {
[btn setLeft:(insert * idx)+ 10];
[btn setCenterY:weakSelf.height / 2.0f];
}];
}
@end