Как сделать сглаживающие слои в iPhoneOS - PullRequest
7 голосов
/ 17 марта 2010

У нас есть Деньги Райнера Книзиа уже пару месяцев. Это сделано довольно хорошо, и поэтому мы обновляли его, как позволяет время. Тем не менее, одна вещь продолжает беспокоить меня. Я никогда не мог получить мой Слоистых карт правильно сглаживать.

Вот пример:

alt text

Открытые карты очень чистые, но всякий раз, когда они Угловые черные линии вокруг карт становятся неровными. Я пробовал это в зависимости от обеих линий, неявных для произведения искусства и нарисованных линий через drawRect :, и они оба делают одно и то же. Я попробовал edgeAntiAliasingMask, и это не делает ничего, насколько я могу судить. Я пробовал masksToBounds для подслоев, для которых установлено значение NO и YES.

Прямо сейчас моя карта настроена как CALayer, который имеет вспомогательные CALayers для спереди и сзади, плюс для некоторых других вещей, таких как маска для осветления и затемняющая маска. Вот некоторые фрагменты кода:

   CArdLayer *theCardLayer = [CArdLayer layer];
   theCardLayer.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge;

   theCardLayer.front = [CALayer layer];
   theCardLayer.front.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge;
   theCardLayer.front.bounds = theCardLayer.bounds;
   theCardLayer.front.masksToBounds = YES;
   theCardLayer.front.contents = (id)[cardDrawing CGImage];

   [theCardLayer addSublayer:theCardLayer.front];

и т. Д. *

Есть идеи, как сделать карты фактически псевдонимами?

Ответы [ 4 ]

4 голосов
/ 22 октября 2012

Это добавляет прозрачную границу:

layer.cornerRadius = 1.01;
3 голосов
/ 23 марта 2010

Лучший результат, который я мог придумать, это сделать то, что я предложил в своем комментарии: я увеличил каждый (прозрачный) рисунок на 1 пиксель с каждой стороны. С этим небольшим запасом карты гораздо лучше сочетаются с фоном.

Итак, не совсем ответ с кодом iPhone, но тот, который, тем не менее, работает на iPhone.

Вот «после» выстрел, который вы можете сравнить с «до», выше: alt text

1 голос
/ 22 октября 2010

Если вы не хотите запускать фотошоп, вот способ, которым вы можете сделать это программно:

http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

В частности -transparentBorderImage: метод категории в UIImage + Alpha.h / .m.

Надеюсь, это поможет другим.

Спасибо http://vocaro.com/trevor/blog!

1 голос
/ 17 марта 2010

Я никогда не использовал каркас, но похоже, что сглаживание работает только на внутренней стороне карты, а не на внешней (при условии, что закругленные углы на не повернутых картах - особый случай). *

Так что ИМХО, на самом деле это проблема композиции карт и фона.

Быстрый просмотр документов предлагает несколько советов (только предположения, попробуйте их):

Убедитесь, что свойство Opaque имеет значение false (возможно, то, что вы видите, является результатом оптимизации кода рендеринга).

Проверьте, как это выглядит, если установить непрозрачность на «почти непрозрачный» (возможно, 0,9?).

Проверьте свойство Mask. Это должно позволить вам создать маску, похожую на альфа-канал, с мягкими границами - хотя я знаю, что это не совсем то, что вы хотите ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...