2009-06-22 17 views
1

我有一個(浮動)評分值從0..100(其中50 =只是好,0 =糟糕和100 =最好) 。什麼是簡單/快速的方式來顯示在iphone視圖中的半星評級

什麼是簡單的方法來顯示這是一個5星評級,iphone,符合下列要求:

  • 簡單(最好只使用基於單個恆星的PNG或五他們繪製操作,並且不需要求助於的Photoshop。)
  • 相當快的(這是一個表格視圖單元格的一部分)
  • 包括星半(或更精細)
  • 顯示一些合理的等級0 (或接近0)

(這是隻顯示所以我並不需要它來響應觸摸事件,雖然這將是很好 - 我目前只是使用滑塊來捕捉在首位評級)

回答

5

我想出了一個簡單的方法來做到這一點,根本不使用任何PNG。我已經子類化一個UIView,然後在drawRect中我這樣做:

- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    [textColor set]; 
    NSString* [email protected]"★★★★★"; 
    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]; 
} 

(這些字符串是5空和滿5星,如果他們只顯示我的Mac上我只是內輸入他們IB使用'特殊字符'菜單)

我已經添加了一個textColor(UIColor *)和rating(int)屬性,所以這些是來自哪裏。

要在IB中添加視圖,只需將類類型更改爲我的UIView子類的名稱即可。然後我可以將視圖添加到IB中的任何容器。

5

我會考慮讓兩個UIImageView直接層疊在一起。底部圖像視圖將包含一個包含五個「空」星的PNG - 頂層爲五個「滿」星的PNG。我會根據評分調整頂層的寬度,以暴露下面的空白開始。

您可以確定頂層的適當寬度的東西,如下列:

newStarLayerWidth = fullStarLayerWidth * (percentage/100) 

您將需要確保設置的意見,即在頂層的圖像不會進行調整且左對齊contentMode設置爲UIViewContentModeLeft,以及設置clipsToBounds = YES,否則圖像將不會基於幀的大小進行剪輯。

如果這不夠快,我會採取相同的方法,但直接繪製細胞here - 但您可能會發現這不是必要的。

+0

+1。好的解決方案 – lostInTransit 2009-06-23 13:40:13

相關問題