2011-07-12 114 views
2

我有一個難以解決的困境。我有一個由自定義UITableViewCells填充的UITableView,我需要將每個單元的背景與背景圖像(背景圖像是UITableView背後的UIView的一部分)混合在一起(如Photoshop乘法)。將UITableViewCell與背景混合

我發現了幾種方法來完成混合(它確實有點作用)。我使用的混合功能是:

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

謝謝!

回答

0

問題是,在移動行時,UITableView不會調用各個人UITabelViewCelldrawRect:方法。它似乎在表格移動開始時緩存視圖,並使用該圖像移動整個表格。因此,自定義UITableViewCell沒有機會更新背景圖像以顯示混合背景的移動。

我可以看到的一種可能的方式是在表格單元格移動時爲背景圖像混合設置動畫效果,即子類UITableView並覆蓋該子類中的drawRect: