什么是在iPhone视图中显示半星评级的简单/快速方式

fra*_*yer 1 iphone graphics cocoa-touch

我的(浮动)评级值为0..100(其中50 =正常,0 =可怕,100 =最佳)的百分比.

在iphone上将其显示为5星评级的简单方法是什么,具有以下要求:

  • 简单(理想情况下只使用基于单个星或其中五个星的绘图操作,而无需求助于photoshop.)
  • 相当快(这是表视图中单元格的一部分)
  • 包括半颗星(或更精细的颗粒)
  • 显示一个合理的评级为0(或接近0)

(这只是显示所以我不需要它来响应触摸事件,虽然那会很好 - 目前我只是使用滑块来捕获评级)

tea*_*bot 5

我会考虑将两个UIImageViews直接叠加在一起.底部图像视图将包含五个'空'星的PNG - 顶层是五个'完整'星的PNG.我会根据评级调整顶层的宽度,以暴露下面的空白开始.

您可以使用以下内容确定顶层的合适宽度:

newStarLayerWidth = fullStarLayerWidth * (percentage / 100)
Run Code Online (Sandbox Code Playgroud)

您需要确保顶层中的图像不会调整大小并通过将视图contentMode设置为UIViewContentModeLeft来左对齐,以及设置clipsToBounds = YES,否则您的图像将不会根据帧大小进行剪裁.

如果这还不够快我会采取同样的方法,但所描述的直接绘制单元格在这里 -但是你会发现,这是没有必要的.


fra*_*yer 5

我想出了一个简单的方法来完成这个,而不使用任何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中的任何容器.