2011-08-24 43 views
19

我一直在使用這種方法將UIView轉換成UIImage。即視圖的屏幕快照 -作爲UIImage捕獲UIView

@interface UIView(Extended) 

- (UIImage *) imageByRenderingView; 

@end 


@implementation UIView(Extended) 


- (UIImage *)imageByRenderingView 
{ 
    UIGraphicsBeginImageContext(self.bounds.size); 
    [self.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return resultingImage; 
} 

@end 

要使用它,我這樣做 -

UIImage *currImage = [self.view imageByRenderingView];

這使整個UIView的圖像表示。現在我想要2張圖片,其中一張是UIView的上半部分,另一張是下半部分。我怎麼做?

+0

需要注意的是(從我的經驗)'renderInContext:'可能是相當昂貴的。我在'cellForRowAtIndexPath:'(現在還沒有,另一個選項)這樣做,這顯然意味着滯後。 –

回答

11

您可以通過使用此代碼一分爲二的UIImage

CGImageRef topOfImageCG = 
     CGImageCreateWithImageInRect(currImage.CGImage, 
             CGRectMake(0, 
               0, 
               currImage.size.width, 
               currImage.size.height/2.0)); 

UIImage *topOfImage = [UIImage imageWithCGImage:topOfImageCG]; 

CGImageRelease(topOfImageCG); 
+0

但這個選擇器需要 - CGImageRef CGImageCreateWithImageInRect(CGImageRef圖像,CGRect矩形);'。如何將'UIImage'轉換成'CGImageRef'? –

+0

Git It! image.CGImage圖像是一個UIImage對象:) –

+0

你是對的,我只是更新了示例。 – pgb