2011-08-24 25 views
19

Ho utilizzato questo metodo per convertire un UIView in UIImage. vale a dire schermo snapshot di una visione -Cattura UIView come UIImage

@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 

Per usarlo, faccio questo -

UIImage *currImage = [self.view imageByRenderingView];

Questo dà la rappresentazione dell'immagine di tutto il UIView. Ora voglio 2 immagini, una è della metà superiore del UIView e l'altra è la metà inferiore. Come lo faccio?

+0

Si noti che (dalla mia esperienza) 'renderInContext:' può essere piuttosto costoso. Lo sto facendo in un 'cellForRowAtIndexPath:' (non avendo, in questo momento, un'altra opzione) e questo ovviamente significa ritardo. –

risposta

11

È possibile dividere il UIImage in due utilizzando questo codice:

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

UIImage *topOfImage = [UIImage imageWithCGImage:topOfImageCG]; 

CGImageRelease(topOfImageCG); 
+0

ma questo selettore accetta - 'CGImageRef CGImageCreateWithImageInRect (CGImageRef image, CGRect rect);'. Come convertire 'UIImage' che devo' CGImageRef'? –

+0

Git It! image.CGImage in cui l'immagine è un oggetto UIImage :) –

+0

Hai ragione, ho appena aggiornato l'esempio. – pgb