В моем приложении я создаю полноэкранный вид, а затем уменьшаю его (примерно до 1/10 исходного размера), чтобы позже можно было анимировать его до полного размера. Проблема в том, что вид выглядит ужасно при таком размере и сильно пикселизирован.
Вот полноразмерный вид:
А вот уменьшенный вид на месте:
Я уменьшаю вид с помощью setFrame:
- есть ли способ указать iOS использовать высококачественную интерполяцию? Или я уже получаю самую качественную интерполяцию и это лучшее, на что она способна?
1 ответ
Я бы порекомендовал превратить вид в изображение, прежде чем его уменьшать (я предполагаю, что в настоящее время у вас есть дневной вид, состоящий из множества подпредставлений, которые вы затем просто уменьшаете, настраивая рамку).
Если вы посмотрите, то увидите, как Apple достигает этого: вместо того, чтобы буквально сжимать представление, они захватывают содержимое представления в виде изображения, заменяют представление этим изображением, а затем уменьшают изображение. Вы бы сделали это по ряду причин: эффективность (вы можете избавиться от уменьшенных представлений и заменить их одним UIImageView), скорость, а также качество.
Чтобы сохранить UIView как изображение, вы должны сделать что-то вроде:
UIGraphicsBeginImageContext(myView.bounds.size);
[myView.layer renderInContext:UIGraphicsGetCurrentContext()];
viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
... затем замените свое представление изображением и уменьшите его.
Похожие вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].
drawRect
. Такое ощущение, что у меня просто не получится это сделать, так как даже самые качественные режимы интерполяции не позволяют уменьшить изображение ниже 25% без потери информации.CGContextSetInterpolationQuality
). Полезная запись в блоге о сжатии изображений и сохранении качества находится здесь: vocaro.com/trevor/blog/2009/10/12/… — опять же, для этого вам понадобится UIImage, поэтому посмотрите код выше, чтобы узнать, как превратить ваше представление в CGImageRef