将UITableViewCell与背景混合

时间:2011-07-12 07:45:18

标签: objective-c ios uitableview uiimage core-graphics

我有一个似乎无法解决的困境。我有一个由自定义UITableViewCells填充的UITableView,我需要将每个单元格的背景混合(如Photoshop多次)与背景图像(背景图像是UITableView后面的UIView的一部分)。

我找到了几种方法来进行混合(它确实有点用)。我正在使用的混合功能是:

 - (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

基本上我现在所做的就是通过获取单元格的框架并创建一个新图像(即该帧中背景的一部分)来切掉我所在的背景。但是,为了使效果起作用,它基本上需要重新计算和更新每一帧(很像alpha效果)。哦,我尝试将计时器设置为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 :(得分:0)

问题是UITableView在移动行时不会调用每个drawRect:UITabelViewCell方法。它似乎在表移动开始时缓存视图,并使用该图像移动整个表。因此,自定义UITableViewCell无法更新背景图像以显示混合背景的移动。

在表格单元格移动时,我可以看到为背景图像混合设置动画的一种可能方式是子类UITableView并覆盖该子类中的drawRect: