iPhone: CALayer + повернуть в 3D + сглаживание?

Вопрос iPhone SDK: я рисую UIImageView на экране. Я повернул его в 3D и предоставил немного перспективы, поэтому изображение выглядит так, как будто оно направлено на экран под углом. Это все работает отлично. Теперь проблема в том, что края полученного изображения вообще не сглаживаются. Кто-нибудь знает, как это сделать?

По сути, я внедряю свою собственную версию CoverFlow (да, да, патент на разработку, бла-бла), используя кварцевые 3D-преобразования для всего. Он работает нормально, за исключением того, что каждая обложка не сглажена, и версия для яблок есть.

Я попытался поиграться с помощью edgeAntialisingMask из CALayer, но это не помогло - по умолчанию все ребра должны быть сглажены...

Спасибо!

5 ответов

Решение

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

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

layer.shadowOpacity = 0.01;

После этого картинка будет выглядеть более ровной после 3D поворота

Ответ Gloomcore дает действительно аккуратный результат.

Однако это иногда делает вещи действительно LAGGY! Добавление растеризации поможет немного:

.layer.shadowOpacity = 0.01;
.layer.shouldRasterize = YES;

Я знаю, что вопрос / ответ старый, но эй, я только что нашел это.

Вы можете попробовать это

Метод: Использование layer.shouldRasterize

  1. Создать superlayer/superview который на 1 пиксель больше во всех 4 направлениях
  2. Сделать преобразование на superlayer/superview
  3. включить layer.shouldRasterize на оригинале layer/view

Метод: Рисование к UIImage

  • Нарисуйте свой контент в UIImage
  • Убедитесь, что у вас есть прозрачная граница в 1 пиксель вокруг содержимого
  • Показать изображение

Ссылка: http://darknoon.com/2012/05/18/the-transparent-border-trick/

У меня была похожая проблема, которая была решена только установкой shouldRasterize = YES, однако, поскольку я повторно использовал свои представления (и слои), shouldRasterize = YES убил производительность.

К счастью, я нашел решение, повернув флажок shouldRasterize = NO в нужное время, чтобы восстановить производительность в случае моего приложения.

Я разместил решение здесь: сглаживание краев UIView после преобразования с использованием преобразования CALayer

Другие вопросы по тегам