Смешивание UITableViewCell с фоном - PullRequest
2 голосов
/ 12 июля 2011

У меня есть дилемма, которую я не могу решить. У меня есть UITableView, заполненный пользовательскими UITableViewCells, и мне нужно, чтобы фон каждой ячейки смешивался (например, умножение Photoshop) с фоновым изображением (фоновое изображение является частью UIView за UITableView).

Я нашел несколько способов сделать смесь (и она работает в некоторой степени). Я использую функцию смешивания:

 - (UIImage *)blendOverlay:(UIImage *)topImage withBaseImage:(UIImage *)baseImage toSize:(CGFloat)imageSize
{
    UIGraphicsBeginImageContext(CGSizeMake(imageSize, imageSize));
    [baseImage drawInRect:CGRectMake(0.0, 0.0, imageSize, imageSize)];
    [topImage drawInRect:CGRectMake(0.0, 0.0, imageSize, imageSize) blendMode:kCGBlendModeMulitply alpha:0.5];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

от http://www.cocoabuilder.com/archive/cocoa/280142-uiimageview-display-as-multiply.html.

По сути, я сейчас делаю фрагмент фона, на котором я закончил, получая рамку ячейки и создавая новое изображение, которое является частью фона в этом кадре. Однако для того, чтобы эффект работал, ему необходимо пересчитать и обновить каждый кадр (так же, как альфа-эффект). О, и я попытался установить таймер на 1/60 секунды и вызвать

[tableView reloadData];

Но это только замедлило все, и перерисовки фактически никогда не происходили. Любая помощь очень ценится, я гуглю почти 3 часа, чтобы помочь.

О, и для потомков я делаю фоновое изображение так:

CGRect r = [tableView rectForRowAtIndexPath:indexPath];
CGRect r2 = [tableView convertRect:r toView:self.view];

CGImageRef imageRef = CGImageCreateWithImageInRect([m_background.image CGImage], r2);
// Get the image by calling [UIImage imageWithCGImage:imageRef]
CGImageRelease(imageRef);

Спасибо!

1 Ответ

0 голосов
/ 12 июля 2011

Проблема в том, что UITableView не вызывает метод drawRect: каждого отдельного UITabelViewCell при перемещении строк.Кажется, что он кэширует представление в начале движения таблицы и использует это изображение для перемещения всей таблицы.Поэтому пользовательский UITableViewCell не имеет возможности обновлять фоновое изображение для отображения движения смешанных фонов.

Единственный возможный способ анимирования смешивания фонового изображения при перемещении ячеек таблицы - это создать подклассUITableView и переопределить drawRect: в этом подклассе.

...