2010-04-21 3 views
8

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

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

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

спасибо!

+0

ли параметр '' edgeAntialiasingMask' в kCALayerLeftEdge | kCALayerRightEdge | kCALayerTopEdge | kCALayerBottomEdge'? – rpetrich

+0

yep, попробовал это. Кроме того, эта комбинация является значением по умолчанию для этого свойства. – Colin

+0

Кажется, что прозрачные пиксели края - это путь (тогда как «magnificationFilter» и 'minificationFilter' позаботятся об этом) – rpetrich

ответ

3

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

+1

Поместите' UIImageView' в больший вид, а затем примените преобразование не будет иметь никакого эффекта - подслои не будут компоноваться в своих родителях, а весь график будет составлен графическим процессором. Добавление прозрачных пикселей к краю изображения должно хорошо работать. – rpetrich

19

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

layer.shadowOpacity = 0.01;

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

+1

Человек, который отвечает, заслуживает золотой значок! – apouche

+1

Если это работает, оно должно быть поддержано! – tipycalFlow

7

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

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

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

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

+0

Да, добавление растеризации помогает немного. Но, к сожалению, он все еще лагги. –

0

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

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

Я отправил решение здесь: Antialiasing edges of UIView after transformation using CALayer's transform

0

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

: Использование 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/

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