У меня есть дилемма, которую я не могу решить. У меня есть 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);
Спасибо!