本文共 2055 字,大约阅读时间需要 6 分钟。
//// ViewController.m// 外卖星级显示//// Copyright © 2016年 LongChuang. All rights reserved.//#import "ViewController.h"#import "LCLevelView.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; LCLevelView *level = [[LCLevelView alloc]init]; // 设置位置要在给属性赋值之前,因为属性赋值的set方法里使用了level的frame level.frame = CGRectMake(20, 20, 60, 24); level.level = 3.5; [self.view addSubview:level];}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
//// LCLevelView.h// 外卖星级显示//// Copyright © 2016年 LongChuang. All rights reserved.//#import/** * 应根据得到的数据自动生成不同图案的星星图片 */@interface LCLevelView : UIView// 对外预留接口,根据传入的数据,通过属性的set方法,自动识别该生成何种星星@property(nonatomic,assign)CGFloat level;@end
//// LCLevelView.m// 外卖星级显示//// Copyright © 2016年 LongChuang. All rights reserved.//#import "LCLevelView.h"@implementation LCLevelView-(void)setLevel:(CGFloat)level{ // 强转获取整数部分 NSInteger grade = (NSInteger)level; // 根据整数部分生成全星图片 for (NSInteger i = 0; i < grade; i++) { [self createStartImage:@"full_star" position:i]; } // 判断是否需要生成半颗星图片 if (level - grade) { [self createStartImage:@"half_star" position:grade++]; } // 生成空的星星 for (NSInteger i = grade; i < 5; i++) { [self createStartImage:@"empty_star" position:i]; }}-(void)createStartImage:(NSString *)imageName position:(NSInteger)position{ UIImageView *imageview = nil; // 当星级评分发生变化时,无需重新创建,直接更改原来5张的图片名称即可,修改名称放到判断条件外 if (self.subviews.count == 5) { imageview = self.subviews[position]; }else { // 设置坐标 imageview = [[UIImageView alloc]init]; CGRect startFrame = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.height); imageview.frame = CGRectOffset(startFrame, position * self.bounds.size.height, 0); // 创建出的图片空间添加到自定义UIView [self addSubview:imageview]; } // 无论是第几次创建,都需要更换图片 imageview.image = [UIImage imageNamed:imageName];}@end
转载地址:http://aykii.baihongyu.com/