fra*_*yer 1 iphone graphics cocoa-touch
我的(浮动)评级值为0..100(其中50 =正常,0 =可怕,100 =最佳)的百分比.
在iphone上将其显示为5星评级的简单方法是什么,具有以下要求:
(这只是显示所以我不需要它来响应触摸事件,虽然那会很好 - 目前我只是使用滑块来捕获评级)
我会考虑将两个UIImageViews直接叠加在一起.底部图像视图将包含五个'空'星的PNG - 顶层是五个'完整'星的PNG.我会根据评级调整顶层的宽度,以暴露下面的空白开始.
您可以使用以下内容确定顶层的合适宽度:
newStarLayerWidth = fullStarLayerWidth * (percentage / 100)
Run Code Online (Sandbox Code Playgroud)
您需要确保顶层中的图像不会调整大小并通过将视图contentMode设置为UIViewContentModeLeft来左对齐,以及设置clipsToBounds = YES,否则您的图像将不会根据帧大小进行剪裁.
如果这还不够快我会采取同样的方法,但所描述的直接绘制单元格在这里 -但是你会发现,这是没有必要的.
我想出了一个简单的方法来完成这个,而不使用任何PNG.我已经将UIView子类化了,然后在drawRect中我完成了这个:
- (void)drawRect:(CGRect)rect {
// Drawing code
CGContextRef context = UIGraphicsGetCurrentContext();
[textColor set];
NSString* stars=@"?????";
rect=self.bounds;
UIFont *font = [UIFont boldSystemFontOfSize: 16];
CGSize starSize = [stars sizeWithFont: font];
rect.size=starSize;
[@"?????" drawInRect:rect withFont: font];
CGRect clip=rect;
clip.size.width=clip.size.width*rating/100;
CGContextClipToRect(context,clip);
[stars drawInRect:rect withFont:font];
}
Run Code Online (Sandbox Code Playgroud)
(这些字符串是5个空的和5个满星,如果它们只显示在我的Mac上.我只是使用'特殊字符'菜单在IB中输入它们)
我添加了一个textColor(UIColor*)和rating(int)属性,这就是那些来自的地方.
要在IB中添加视图,我只需将类类型更改为我的UIView子类的名称.然后我可以将视图添加到IB中的任何容器.