UITableView CornerRadius с проблемами производительности границ на iOS

У меня есть интересное уведомление о производительности прокрутки на UITableView с включенными cornerRadius, borderWidth и borderColor.

self.tableView.layer.cornerRadius = 10.f;
self.tableView.layer.borderWidth = 1.0f;
self.tableView.layer.borderColor = [UIColor whiteColor].CGColor;

Если я уберу borderWidth и borderColor, то прокрутка не составит 60 кадров в секунду. Пока я добавляю эти два свойства к падению FPS слоя.

У кого-нибудь есть предложение или объяснение, почему происходит это странное поведение?

Огромное спасибо!


person Borut Tomazin    schedule 27.06.2012    source источник
comment
Потому что требуется больше операций рисования.   -  person onegray    schedule 27.06.2012
comment
Я так думаю. Установка borderWidth и borderColor добавляет дополнительные операции для рисования границы. То же самое для cornerRadius.   -  person onegray    schedule 27.06.2012
comment
Почему это может быть проблемой, потому что граница не прокручивается, только ячейки ...?   -  person Borut Tomazin    schedule 27.06.2012
comment
у тебя тоже есть тени?   -  person Michał Zygar    schedule 04.07.2012
comment
Хм, я заметил сильное падение производительности при использовании теней (без shadowPath), но не с этим. Каким методом вы это устанавливаете?   -  person Michał Zygar    schedule 04.07.2012
comment
Я установил это в методе viewDidLoad следующим образом: self.tableView.layer.cornerRadius = 10.f; self.tableView.layer.borderWidth = 1.0f; self.tableView.layer.borderColor = [UIColor whiteColor].CGColor;   -  person Borut Tomazin    schedule 04.07.2012
comment
хорошо, я вижу, проблема возникает при объединении границы и угла. Вы можете обойти это, добавив табличное представление в контейнер (UIView) и применив к контейнеру CornerRadius и границу.   -  person Michał Zygar    schedule 04.07.2012
comment
Я сделал это уже без везения. Все та же вялость. Это своего рода логика, потому что tableView все еще заключен в другой контейнер и все еще должен выполнять вычисления для закругленных углов...   -  person Borut Tomazin    schedule 04.07.2012


Ответы (2)


CALayer имеет свойство shouldRasterize для такого типа проблем с производительностью. Просто установите

self.tableView.layer.shouldRasterize = YES;

Эта единственная строка сэкономила мне много времени и работы.

person Mohd Iftekhar Qurashi    schedule 30.03.2013

Я только что узнал, что rowRadius с borderWidth значительно снижает производительность tableView. Так что вместо радиуса 10.f я поменял радиус на 5.f, и производительность значительно возросла. Все еще не идеально, но заметно лучше...

person Borut Tomazin    schedule 04.07.2012