Я хотел бы рассмотреть два слоя UIImageView, расположенных друг над другом. Нижнее изображение будет содержать PNG из пяти «пустых» звезд - верхний слой - PNG из пяти «полных» звезд. Я бы изменил ширину верхнего слоя в зависимости от рейтинга, чтобы выставить пустые старты под ним.
Вы можете определить подходящую ширину верхнего слоя следующим образом:
newStarLayerWidth = fullStarLayerWidth * (percentage / 100)
Вам необходимо убедиться, что размер изображения в верхнем слое не изменен и выровнен по левому краю, установив для view contentMode значение UIViewContentModeLeft, а также установив clipsToBounds = YES, иначе ваше изображение не будет обрезаться в зависимости от размера кадра.
Если это не достаточно быстро, я бы использовал тот же подход, но нарисовал бы ячейку напрямую, как описано здесь - однако вы можете обнаружить, что в этом нет необходимости.