Создание UITableView с изображениями размером с ячейку с плавной прокруткой - PullRequest
1 голос
/ 03 сентября 2010

ВСЕ ПИСЬМЕННО ЗДЕСЬ НАСТОЯЩЕЕ РАБОТАЕТ ПРАВИЛЬНО

ИСКЛЮЧИТЬ ДЛЯ [UIImage imageNamed:] ИСПОЛЬЗОВАНИЕ МЕТОДА


Реализация

Я использую модель в ведьмеу вас есть пользовательский UITableViewCell с одним пользовательским UIView, настроенным как ячейки backgroundView.

Пользовательский UIView содержит два изображения размером с ячейку ( 320x80 px ), одно из которых на 100% прозрачно для половины вида.Все элементы имеют значение Непрозрачный и имеют свойство 1.0 Альфа .

Я не использую ячейки повторно, потому что мне не удалось заставить их загружать разные изображения.Ячейка повторно используется по одному до 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 с помощью метода imageNamed: UIImage.

Они устанавливаются в методе 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 вообще нельзя прокручивать, его бьют по каждой ячейке, он громоздкий и жуткий.

Мысли

Хорошо копая пример кода, переполнение стека и форумы, я подумал об использовании OpenGL ESдля предварительного рендеринга изображений, но разве сложно сделать плавную прокрутку?

1 Ответ

1 голос
/ 03 сентября 2010

Что не так просто с использованием UIImageViews? Они не достаточно быстры? (Они должны быть, если вы предварительно загружаете UIImages).

Следует отметить, что [UIImage imageNamed:] не будет явно загружать данные изображения в память. Это даст вам ссылку, которая подкреплена данными на диске. Вы можете обойти это, позвонив [yourImage CGImage].

...