Быстрое вступление
Редактировать: У меня 9 ячеек.Все 9 ячеек содержат пучок изображений.Изображения в 7 пакетах имеют некоторую прозрачность ( в файле, а не в качестве опции наложения в коде ) для загрузки изображений из Интернета под ними.Проблема с прокруткой влияет на представление таблицы, когда как пакетные, так и веб-изображения загружаются в массивы как UIImage
объекты.
Если я отключаю рисование веб-изображений, прокрутка - это прекрасно, когда я отключаю изображение из комплекта прокрутки - это нормально.Но вместе вы получаете то, чего не хотите: плохой пользовательский опыт.
Реализация
Я использую модель, у вас есть пользовательский UITableViewCell
содин пользовательский UIView
, настроенный как ячейки backgroundView
.
Пользовательский UIView
содержит два изображения размером с ячейку ( 320x80 px ).Все элементы установлены на непрозрачный и имеют свойство 1.0 Alpha, но одно из изображений частично 100% прозрачно.
Я не использую ячейки повторно, потому что мне не удалось заставить их загружать разные изображения.Ячейка повторно используется по одному до 9 ячеек в целом.Итак, у меня в памяти 9 многократно используемых ячеек. Может быть, это проблема.
Ячейка initWithStyle:reuseIdentifier
часть метода:
CGRect viewFrame = CGRectMake(0.0f, 0.0f, 320.0f, 80.0f);
customCellView = [[CustomCellView alloc] initWithFrame:viewFrame];
customCellView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self setBackgroundView:customCellView];
CustomCellView * Метод инициализации :
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
self.opaque = YES;
self.backgroundColor = [UIColor UICustomColor];
}
return self;
}
Изображения загружаются в NSMutableArray как объекты UIImage из файлов PNG, расположенных в Интернете ( 40 - 80 кБайт) с UIImage's imageWithData:
метод ( после асинхронной загрузки).
Они устанавливаются для видимых ячеек в методе загрузки изображений и устанавливают из массива, в котором они были сохранены в в методе UITableViewDelegate tableView:cellForRowAtIndexPath:
и передается через UITableViewCell с пользовательским методом в UIView.
А затем рисуется в переопределенном методе UIView drawRect:
:
- (void)drawRect:(CGRect)rect {
CGRect contentRect = self.bounds;
if (!self.editing) {
CGFloat boundsX = contentRect.origin.x;
CGFloat boundsY = contentRect.origin.y;
CGPoint point;
point = CGPointMake(boundsX, boundsY);
if (firstImage) { [firstImage drawInRect:contentRect blendMode:kCGBlendModeNormal alpha:1.0f]; }
if (secondImage) { [secondImage drawInRect:contentRect blendMode:kCGBlendModeNormal alpha:1.0f]; }
}
}
Как вы видите изображениярисуется с помощью метода drawInRect:blendMode:alpha:
.
Проблема
Хорошо, когда на устройстве UITableView
прокручивается вы можете заметить ( замечание плохо дляпользователь, очень плохой ) время простоя при каждой загрузке новой ячейки во время прокрутки.
Редактировать: Проблема скорее в смешивании, в коде вы видите, что изображение в Интернете рисуется под тем, которое уже есть в пакете - отсутствие рисования перекрывающегося изображения делает прокрутку на 70% быстрее.
Мысли
В той же реализации нет времени простоя при загрузке изображений из пакета.Должен ли я сохранять изображения в Application Sandbox, а затем использовать их оттуда.Звучит очень плохо , потому что вы должны минимизировать операции чтения-записи в приложении для мобильных устройств, потому что диск медленно умирает при каждом чтении или записи.
Редактировать: Илиможет быть, я должен хранить изображения как объекты Core Graphics?
Редактировать: Есть некоторые подсказки в этом вопросе.Но я не знаю, как эффективно сделать пользовательский рисунок.