Я использую пользовательский UITableViewCell , в который помещаю подкласс UIView (в пределах contentView
, естественно). UIView , о котором идет речь, отображает стрелку направления и две строки вспомогательного текста.
Стрелка отображается с помощью слоя с фоновым цветом и маски в форме стрелки.Цвет фона меняется на одну из двух возможностей в зависимости от направления, на которое указывает стрелка.
Представление получает NSNotification всякий раз, когда необходимо обновить стрелку (на основе, но не идентичноТекущий заголовок - каждая ячейка и вид разные).Когда он получает уведомление, представление вызывает закрытый метод для выполнения преобразования.Это анимирует слой со стрелкой, эффективно вращая его вокруг своего центра в новом направлении, например:
// Update layer BG color, then ...
[UIView setAnimationBeginsFromCurrentState:YES];
CATransform3D transform = CATransform3DMakeRotation(DegreesToRadians(locationDirection), 0, 0, 1);
_arrowLayer.transform = transform;
(nb: _arrowLayer
только для внутреннего использования и не отображается через свойство.)
В UIView также есть свойство для установки информации, используемой для создания вспомогательного текста.Когда это изменяется, вызывается setNeedsDisplay
, метод drawRect:
производит вычисления и выводит результирующий текст.
Это все хорошо.Тем не менее, есть одна серьезная проблема Я сталкиваюсь с:
Прокрутка табличного представления в то же время, когда стрелки анимируют результаты в некоторой прерывистой прокрутке высшей лиги,часто до точки прокрутки останавливается!Даже если это единственное представление в contentView
(во имя минимальных тестовых случаев), это не имеет значения.
Если устройство не перемещено, прокрутка умеренно приемлема, но все еще открыта для улучшения.
Я надеюсь, что я просто делаю фундаментальную ошибку (Не используйте drawRect:
? Преобразование выполняется каким-либо другим способом? Ничего из вышеперечисленного?)
Спасибо взаранее за любые подсказки / советы!
ОБНОВЛЕНИЕ 4 октября 2011 г .: Я попытался установить UITableViewController смотреть UIScrollViewDelegate (согласно UIScrollView Руководство по программированию), когда при запуске / остановке прокрутки каждый вид стрелки со стрелкой запрашивает своего делегата (в данном случае Table VC), можно ли анимировать.Это тоже мало помогает.Если анимация идет, нам не повезло.Возможно, NSNotification в порядке, при этом стрелка направления ищет определенное уведомление.(Хотя это звучит немного задом наперед, не так ли? Предоставление другим объектам уведомления, которое они могут отправить? Хмм.)