iPhone: CALayer + повернуть в 3D + сглаживание? - PullRequest
7 голосов
/ 21 апреля 2010

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

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

Я пытался возиться с функцией edgeAntialisingMas of CALayer, но это не помогло - по умолчанию все ребра должны быть сглажены ...

спасибо!

Ответы [ 5 ]

19 голосов
/ 19 апреля 2011

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

layer.shadowOpacity = 0.01;

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

7 голосов
/ 12 июля 2012

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

однако это иногда делает вещи ЛАГГИ! Добавление немного растеризации поможет:

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

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

2 голосов
/ 22 апреля 2010

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

0 голосов
/ 20 августа 2014

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

Метод: Используя layer.shouldRasterize

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

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

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

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

0 голосов
/ 01 мая 2013

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

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

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

...