<强>常规思路:强>
创建两个视图,通过对循环创建imageView,未点亮星星视图在下,点亮星星视图在上重合在一起,当用户点击视图时,通过改变点亮星星视图的宽度实现功能
<强>本文思路:强>
直接重写绘制矩形方法,在绘制矩形用drawimage画出星星,根据currentValue画出不同类型的星星,当用户点击视图时,改变currentValue,并根据改变后的currentValue重新画出星星。
展示图:
代码:
自定义一个继承UIView的CYStarView
属性:
/* *完成后执行*/的块 @ property(复制、原子)空(^ completionBlock) (NSInteger);/* *是否可以点击*/@ property(分配、原子)BOOL可点击;/* *星星个数*/@ property(分配、原子)NSInteger numberOfStars;/* *星星边长*/@ property(分配、原子)是CGFloat lengthOfSide;/* *评价值*/@ property(分配、原子)NSInteger currentValue;/* *星星间隔*/@ property(分配、原子)CGFloat间距;
重写setter方法,在setter方法中调用setNeedsDisplay,会执行绘制矩形:
- (void) setLengthOfSide: (CGFloat) lengthOfSide {//超过控件高度 如果(lengthOfSide比;self.frame.size.height) { lengthOfSide=self.frame.size.height; }//超过控件宽度 如果(lengthOfSide比;self.frame.size.width/_numberOfStars) { lengthOfSide=self.frame.size.width/_numberOfStars; } _lengthOfSide=lengthOfSide; _spacing=(self.frame.size.width - lengthOfSide * _numberOfStars)/_numberOfStars; (自我setNeedsDisplay); } >之前在绘制矩形中画星星:
- (void)绘制矩形:(CGRect中)矩形{ 用户界面图像* lightImage=[界面图像imageNamed: @“star_light”); 用户界面图像* darkImage=[界面图像imageNamed: @“star_dark”);//获取当前上下文 CGContextRef上下文=UIGraphicsGetCurrentContext (); for (int i=0;我& lt;self.numberOfStars;我+ +){//根据currentValue选择是画亮的还是暗的星星 用户界面图像*图像=我在=自我。currentValue & # 63;darkImage: lightImage; CGRect中imageRect=CGRectMake(自我。间距/2 +(自我。lengthOfSide + self.spacing) *我,(self.frame.size.height - self.lengthOfSide)/2,自我。lengthOfSide self.lengthOfSide); CGContextSaveGState(上下文);//坐标系Y轴是相反的,进行翻转 CGContextScaleCTM(上下文、1.0 - 1.0); CGContextTranslateCTM(上下文、0 - rect.origin。y * 2 - rect.size.height); CGContextDrawImage(上下文、imageRect image.CGImage); CGContextRestoreGState(上下文); } } >之前使用:
在要使用的控制器中:
#进口“CYStarView.h”//初始化,传入必要参数 CYStarView * starView=[[CYStarView alloc] initWithFrame:帧numberOfStars: lengthOfSide数量:长度);//设置可点击,评论界面设置为是的,展示界面设置为不 self.starView。可点击=是的;////设置completionBlock self.starView.completionBlock=^ (NSInteger currentValue) {//点击后的操作放这里};项目地址:点我点我!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
iOS上下文实现评价星星示例代码