2011-08-24 14 views
19

Używam tej metody do przekonwertowania UIView na UIImage. tj migawka ekran z widokiem -Przechwyć UIView jako 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 

Aby go użyć, mogę to zrobić -

UIImage *currImage = [self.view imageByRenderingView];

Daje reprezentację obrazu całego UIView. Teraz chcę 2 obrazy, jeden jest z górnej połowy UIView, a drugi to dolna połowa. Jak mogę to zrobić?

+0

pamiętać, że (z mojego doświadczenia) 'renderInContext:' może być dość kosztowne. Robię to w 'cellForRowAtIndexPath:' (nie mając, teraz, innej opcji) i to oczywiście oznacza opóźnienie. –

Odpowiedz

11

można podzielić na dwie UIImage za pomocą tego kodu:

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

UIImage *topOfImage = [UIImage imageWithCGImage:topOfImageCG]; 

CGImageRelease(topOfImageCG); 
+0

ale ten selektor przyjmuje - 'CGImageRef CGImageCreateWithImageInRect (obraz CGImageRef, CGRect rect);'. Jak przekonwertować 'UIImage', które mam do' CGImageRef'? –

+0

Git It! image.CGImage gdzie obraz jest obiektem UIImage :) –

+0

Masz rację, właśnie zaktualizowałem próbkę. – pgb