2016-08-29 9 views
0

У меня есть UIView предка - скажем MyView, который переопределяет метод -drawInRect для отображения изображенияУдалить качество проигрышная, после линейки, нанесенной

override func draw(_ rect: CGRect) { 
    super.draw(rect) 

    image?.draw(in: rect) 

    /*some code here*/ 
} 

Эта точка зрения масштабирования в обоих направлениях в какой-то момент. После увеличения отображаемое изображение теряет качество. Говоря, если я создаю MyView с размером 20 * 20, свойство bounds остается неизменным после масштабирования, но преобразованное изображение, которое я пытаюсь отобразить, является низким качеством, потому что я пытаюсь нарисовать его с тем же размером 20x20. Есть ли способ рисовать изображение соответственно для масштабирования моего представления?

+0

I масштабный вид сверху, а не сам вид –

ответ

0

Во-первых, настоятельно рекомендуется использовать UIImageView в качестве подзадачи, а не пытаться реализовать даже скромно сложное изображение. UIImageView оптимизирован для многих проблем, с которыми вы можете столкнуться. Это не идеально, и иногда можно сделать лучше, если вы знаете, что делаете, но это хорошо работает.

К вашей конкретной проблеме, ваш contentMode почти наверняка scaleToFill (это значение по умолчанию). Самое простое решение - изменить его на redraw, чтобы принудительно выполнить полное перерисовку при изменении границ. Это не очень эффективно, но может быть хорошо для вашей проблемы (часто это нормально). Делать его как высококачественным , так и высокоэффективным является немного более сложным и часто требует большого количества специальных знаний о том, как ведет себя ваше приложение. Для простых случаев, делая это высокое качество и эффективность, это то, что делает UIImageView.

Если вы надежно масштабируетесь от 20x20 до какого-либо другого определенного размера, и у вас нет слишком большого количества просмотров, другой трюк состоит в том, чтобы нарисовать на вашем полном размере, а затем масштабировать вниз до 20x20. Это очень неэффективен, если у вас много просмотров, а размер окончательных изображений большой, но может быть очень быстрым и качественным, так что, по крайней мере, стоит подумать. Я сделал это для небольших масштабирования (например, до 110%). Это, вероятно, не было бы хорошим способом превратить миниатюры в полноэкранные изображения.

+0

UIImageView не подходит для меня, потому что в какой-то момент я добавляю темное наложение к непрозрачным пикселям через blendMode + fillColor в drawInRect. Решение с contentMode не будет работать, потому что, как я уже сказал, границы не меняются. только преобразование масштабирование - текущее решение, но оно не кажется наиболее эффективным. –

 Смежные вопросы

  • Нет связанных вопросов^_^