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
- Создать
superlayer
/superview
который на 1 пиксель больше во всех 4 направлениях - Сделать преобразование на
superlayer
/superview
- включить
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