iOS評(píng)分用星星展示(可滑動(dòng)設(shè)置評(píng)分)

這兩天項(xiàng)目有個(gè)需求是用戶評(píng)價(jià)分?jǐn)?shù)(0-5)用星星多少來展示

自己自定義了一個(gè)UIView控件來顯示,代碼如下:

.h文件:

@class ZPMyStarShow;

/** *? 星級(jí)評(píng)分條代理 */

@protocol ZPMyStarShowDelegate/**

*? 評(píng)分改變

*? @param ratingBar 評(píng)分控件

*? @param newRating 評(píng)分值

*/

- (void)ratingBar:(ZPMyStarShow *)ratingBar ratingChanged:(float)newRating;

@end


以上是代理方法

@interface ZPMyStarShow : UIView

/** *? 初始化設(shè)置未選中圖片、半選中圖片帮寻、全選中圖片,以及評(píng)分值改變的代理(可以用 *? Block)實(shí)現(xiàn) *

* @param deselectedName? 未選中圖片名稱?

*? @param halfSelectedName 半選中圖片名稱

?*? @param fullSelectedName 全選中圖片名稱?

*? @param delegate? ? ? ? ? 代理 */

? ? ? ? - (void)setImageDeselected:(NSString *)deselectedName halfSelected:(NSString *)halfSelectedName fullSelected:(NSString *)fullSelectedName andDelegate:(id)delegate;

/**

*? 是否是指示器阱佛,如果是指示器余耽,就不能滑動(dòng)了善榛,只顯示結(jié)果辩蛋,不是指示器的話就能滑動(dòng)修改值


*? 默認(rèn)為NO

*/

@property (nonatomic,assign) BOOL isIndicator;

/**

*? 當(dāng)前應(yīng)顯示的星星數(shù)

*? 默認(rèn)設(shè)置是0

*/

@property (assign, nonatomic) CGFloat starRating;

.m文件:

@interface ZPMyStarShow (){? ??

? ? ? ? float _lastRating;? ? ? ??

? ? ? ? float height;? ?

? ? ? ?float width;? ? ? ??

? ? ? ?UIImage *unSelectedImage;? ??

? ? ? ?UIImage *halfSelectedImage;? ??

? ? ? ?UIImage *fullSelectedImage;

}

@property (nonatomic,strong) UIImageView *s1;

@property (nonatomic,strong) UIImageView *s2;

@property (nonatomic,strong) UIImageView *s3;

@property (nonatomic,strong) UIImageView *s4;

@property (nonatomic,strong) UIImageView *s5;

@property (nonatomic,weak) id delegate;

@end

@implementation ZPMyStarShow

/**

?*? 初始化設(shè)置未選中圖片、半選中圖片移盆、全選中圖片悼院,以及評(píng)分值改變的代理(可以用 *? Block)實(shí)現(xiàn) ?

*? @param deselectedName? 未選中圖片名稱?

*? @param halfSelectedName 半選中圖片名稱?

*? @param fullSelectedName 全選中圖片名稱 *??

@param delegate? ? ? ? ? 代理?

*/

-(void)setImageDeselected:(NSString *)deselectedName halfSelected:(NSString *)halfSelectedName fullSelected:(NSString *)fullSelectedName andDelegate:(id)delegate{

? ? ? ? self.delegate = delegate;

? ? ? ? unSelectedImage = [UIImage imageNamed:deselectedName];

? ? ? ? halfSelectedImage = halfSelectedName == nil ? unSelectedImage : [UIImage imageNamed:halfSelectedName];

? ? ? ? fullSelectedImage = [UIImage imageNamed:fullSelectedName];

? ? ? ?height = 0.0,width = 0.0;

? ? ? ?if (height < [fullSelectedImage size].height) {

? ? ? ? ? ? ? ?height = [fullSelectedImage size].height;

? ? ? ? }

? ? ? ?if (height < [halfSelectedImage size].height) {

? ? ? ? ? ? ? height = [halfSelectedImage size].height;

? ? ? ?}

? ? ? if (height < [unSelectedImage size].height) {

? ? ? ? ? ? ?height = [unSelectedImage size].height;

? ? ? }

? ? ? if (width < [fullSelectedImage size].width) {

? ? ? ? ? ?width = [fullSelectedImage size].width;

? ? ? }

? ? ? if (width < [halfSelectedImage size].width) {

? ? ? ? ? ? ?width = [halfSelectedImage size].width;

? ? ? }

? ? ? ?if (width < [unSelectedImage size].width) {

? ? ? ? ? ? ? width = [unSelectedImage size].width;

? ? ? ?}

? ? ? ?_s1 = [[UIImageView alloc] initWithImage:unSelectedImage];

? ? ? ?_s2 = [[UIImageView alloc] initWithImage:unSelectedImage];

? ? ? ?_s3 = [[UIImageView alloc] initWithImage:unSelectedImage];

? ? ? _s4 = [[UIImageView alloc] initWithImage:unSelectedImage];

? ? ? _s5 = [[UIImageView alloc] initWithImage:unSelectedImage];

? ? ? ?[_s1 setFrame:CGRectMake(0,? ? ? ? 0, width, height)];

? ? ? [_s2 setFrame:CGRectMake(width,? ? 0, width, height)];

? ? ? [_s3 setFrame:CGRectMake(2 * width, 0, width, height)];

? ? ? [_s4 setFrame:CGRectMake(3 * width, 0, width, height)];

? ? ? [_s5 setFrame:CGRectMake(4 * width, 0, width, height)];

? ? ? [_s1 setUserInteractionEnabled:NO];

? ? ? ?[_s2 setUserInteractionEnabled:NO];

? ? ? ? [_s3 setUserInteractionEnabled:NO];

? ? ? ?[_s4 setUserInteractionEnabled:NO];

? ? ? [_s5 setUserInteractionEnabled:NO];

? ? ? ?[self addSubview:_s1];

? ? ? ?[self addSubview:_s2];

? ? ? ?[self addSubview:_s3];

? ? ? ?[self addSubview:_s4];

? ? ? ?[self addSubview:_s5];

? ? ? ?CGRect frame = [self frame];

? ? ? ?frame.size.width = width * 5;

? ? ? ?frame.size.height = height;

? ? ? ?[self setFrame:frame];

? ? ? ?_starRating = 0.0;

? ? ? ?_lastRating = 0.0;

}

//外部傳入評(píng)分值

-(void)setStarRating:(CGFloat)starRating{

? ? ? ? _starRating = starRating;

? ? ? ? _lastRating = starRating;

? ? ? ? [self displayRating:starRating]; ?

}

/**

*? 設(shè)置評(píng)分值,顯示相應(yīng)的星星

*? @param rating 評(píng)分值

*/

-(void)displayRating:(float)rating{

? ? ? ? ?[_s1 setImage:unSelectedImage];

? ? ? ? ?[_s2 setImage:unSelectedImage];

? ? ? ? [_s3 setImage:unSelectedImage];

? ? ? ? [_s4 setImage:unSelectedImage];

? ? ? ? [_s5 setImage:unSelectedImage];

? ? ? ? if (rating >= 0.5) {

? ? ? ? ? ? ? ? [_s1 setImage:halfSelectedImage];

? ? ? ? }

? ? ? ? if (rating >= 1) {

? ? ? ? ? ? ? ?[_s1 setImage:fullSelectedImage];

? ? ? ?}

? ? ? ?if (rating >= 1.5) {

? ? ? ? ? ? ? [_s2 setImage:halfSelectedImage];

? ? ? ?}

? ? ? if (rating >= 2) {

? ? ? ? ? ? ? ?[_s2 setImage:fullSelectedImage];

? ? ? }

? ? ? if (rating >= 2.5) {

? ? ? ? ? ? ? [_s3 setImage:halfSelectedImage];

? ? ? }

? ? ? if (rating >= 3) {

? ? ? ? ? ? ? [_s3 setImage:fullSelectedImage];

? ? ? }

? ? ? if (rating >= 3.5) {

? ? ? ? ? ? ? [_s4 setImage:halfSelectedImage];

? ? ? ?}

? ? ? ?if (rating >= 4) {

? ? ? ? ? ? ? [_s4 setImage:fullSelectedImage];

? ? ? ?}

? ? ? ?if (rating >= 4.5) {

? ? ? ? ? ? ?[_s5 setImage:halfSelectedImage];

? ? ? ?}

? ? ? if (rating >= 5) {

? ? ? ? ? ? ?[_s5 setImage:fullSelectedImage];

? ? ? }

? ? ? if ([self respondsToSelector:@selector(ratingBar:ratingChanged:)]) {

? ? ? ? ? ? [_delegate ratingBar:self ratingChanged:rating];

? ? ? ?}

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

? ? ? ? ? ? [super touchesBegan:touches withEvent:event];

}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

? ? ? ? ? ?[super touchesEnded:touches withEvent:event];

}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

? ? ? ? ? if (self.isIndicator) {

? ? ? ? ? ? ? ? ?return;

? ? ? ? ?}

? ? ? ? CGPoint point = [[touches anyObject] locationInView:self];

? ? ? ? ?int newRating = (int) (point.x / width) + 1;

? ? ? ? ?if (newRating > 5)

? ? ? ? ? ? ? ? ?return;

? ? ? ? ? ?if (point.x < 0) {

? ? ? ? ? ? ? ? ?newRating = 0;

? ? ? ? ? ? }

? ? ? ? ? ?if (newRating != _lastRating){

? ? ? ? ? ? ? ? ?[self displayRating:newRating];

? ? ? ? ? ?}

}

直接拷貝.h和.m文件就可以使用,- (void)setImageDeselected:(NSString *)deselectedName halfSelected:(NSString *)halfSelectedName fullSelected:(NSString *)fullSelectedName andDelegate:(id)delegate,在此方法里設(shè)置顯示星星的圖片和代理,然后設(shè)置isIndicator的值為YES,則只是顯示器,不能滑動(dòng)改變星星顯示,默認(rèn)值是NO,設(shè)置starRating為2.0,則顯示兩個(gè)點(diǎn)亮的星星,默認(rèn)值是0.0,即不顯示點(diǎn)亮的星星.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咒循,隨后出現(xiàn)的幾起案子据途,更是在濱河造成了極大的恐慌绞愚,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颖医,死亡現(xiàn)場(chǎng)離奇詭異位衩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)熔萧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門糖驴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人佛致,你說我怎么就攤上這事贮缕。” “怎么了晌杰?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長筷弦。 經(jīng)常有香客問我肋演,道長,這世上最難降的妖魔是什么烂琴? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任爹殊,我火速辦了婚禮,結(jié)果婚禮上奸绷,老公的妹妹穿的比我還像新娘梗夸。我一直安慰自己,他們只是感情好号醉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布反症。 她就那樣靜靜地躺著,像睡著了一般畔派。 火紅的嫁衣襯著肌膚如雪铅碍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天线椰,我揣著相機(jī)與錄音胞谈,去河邊找鬼。 笑死憨愉,一個(gè)胖子當(dāng)著我的面吹牛烦绳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播配紫,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼径密,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了躺孝?” 一聲冷哼從身側(cè)響起睹晒,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤趟庄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后伪很,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戚啥,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年锉试,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了猫十。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呆盖,死狀恐怖拖云,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情应又,我是刑警寧澤宙项,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站株扛,受9級(jí)特大地震影響尤筐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洞就,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一盆繁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旬蟋,春花似錦油昂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匆浙,卻和暖如春鸣哀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吞彤。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工我衬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饰恕。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓挠羔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親埋嵌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子破加,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容