Лучший и быстрый способ закруглить углы UIView? - PullRequest
7 голосов
/ 26 декабря 2011

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

Итак, мой вопрос: как я могу округлить углы просмотра с минимальной задержкой.

Очевидный:

view.layer.cornerRadius = value;
view.layer.masksToBounds = YES;

Однако я слышал, что установка маски CALayer с layer.mask быстрее? И если да, то какое из этих двух решений лучше ?: https://stackoverflow.com/a/4930166/458205

Этот код использует маскирование, однако слой маски также использует cornerRadius, так что это на самом деле быстрее?

CALayer *maskLayer = [CALayer layer];
maskLayer.cornerRadius = radius;
// set the mask
self.view.layer.mask = maskLayer;

Или решение 1, приведенное выше, или этот ответ будет более эффективным?

Я знаю, что я ссылаюсь на другой вопрос несколько раз, однако этот вопрос касается маскировки только 2 углов (что приводит к нескольким различным решениям), однако я прошу наиболее эффективный способ прокрутки с размерами экрана 0,6 в виде плавно, насколько это возможно, с закругленными углами (как на этом изображении). CardSwitcher Screenshot

Ответы [ 2 ]

3 голосов
/ 27 марта 2013

Вам необходимо установить rasterizationScale, а также view.layer.shouldRasterize.

Обычно я делаю это:

view.layer.shouldRasterize = YES;
view.layer.rasterizationScale = [[UIScreen mainScreen] scale];

Если вы не установите растеризацию Scale, для растеризации всегда будет по умолчанию шкала 1 (без сетчатки).

Для меня это обычно ставит мою производительность прокрутки в один ряд с UITableView.

1 голос
/ 28 декабря 2011

Первый фрагмент более эффективен, потому что закругленный угол сам по себе является маской.для увеличения производительности закругленных углов используйте: view.layer.shoudRasterize = YES;

...