Что такое простой / быстрый способ отображения оценок на уровне пол звездочки в представлении iphone? - PullRequest
1 голос
/ 22 июня 2009

У меня есть (плавающее) значение рейтинга в процентах от 0..100 (где 50 = Просто ОК, 0 = ужасно и 100 = лучше).

Какой простой способ отобразить это как 5-звездочный рейтинг на iphone со следующими требованиями:

  • просто (в идеале просто используя операции рисования, основанные на png одной звезды или пяти из них, и не прибегая к фотошопу.)
  • достаточно быстро (это часть ячейки в табличном представлении)
  • включает половину звезд (или более мелкозернистых)
  • отображает что-то разумное для рейтинга 0 (или близко к 0)

(Это только отображение, поэтому мне не нужно, чтобы оно реагировало на сенсорные события, хотя это было бы неплохо - в настоящее время я просто использую ползунок для получения рейтинга в первую очередь)

Ответы [ 2 ]

5 голосов
/ 24 июня 2009

Я придумал простой способ сделать это без использования 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];
}

(эти строки 5 пустых и 5 полных звезд, если они отображаются только на моем Mac. Я только что ввел их в IB, используя меню «специальные символы»)

Я добавил свойство textColor (UIColor *) и rating (int), так что именно отсюда они и исходят.

Чтобы добавить представление в IB, я просто изменяю тип класса на имя моего подкласса UIView. Затем я могу добавить представление к любому контейнеру в IB.

5 голосов
/ 22 июня 2009

Я хотел бы рассмотреть два слоя UIImageView, расположенных друг над другом. Нижнее изображение будет содержать PNG из пяти «пустых» звезд - верхний слой - PNG из пяти «полных» звезд. Я бы изменил ширину верхнего слоя в зависимости от рейтинга, чтобы выставить пустые старты под ним.

Вы можете определить подходящую ширину верхнего слоя следующим образом:

newStarLayerWidth = fullStarLayerWidth * (percentage / 100)

Вам необходимо убедиться, что размер изображения в верхнем слое не изменен и выровнен по левому краю, установив для view contentMode значение UIViewContentModeLeft, а также установив clipsToBounds = YES, иначе ваше изображение не будет обрезаться в зависимости от размера кадра.

Если это не достаточно быстро, я бы использовал тот же подход, но нарисовал бы ячейку напрямую, как описано здесь - однако вы можете обнаружить, что в этом нет необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...