2013-03-22 35 views
1

我能夠裁剪視圖與此代碼如何截取已變形的視圖?

- (UIImage *)captureScreenInRect:(CGRect)captureFrame { 
    CALayer *layer; 
    layer = self.view.layer; 
    UIGraphicsBeginImageContext(self.view.bounds.size); 
    CGContextClipToRect (UIGraphicsGetCurrentContext(),captureFrame); 
    [layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return screenImage; 
} 

但是我有變換放大的imageview的並且不按比例顯示。

如何捕捉EXACTLY用戶看到的屏幕

回答

2

的堆棧溢出問題"renderInContext:" and CATransform3D有更多的信息是什麼,但要點是:

QCCompositionLayer,CAOpenGLLayer和QTMovieLayer層未呈現。此外,不使用3D變換的圖層,也不繪製指定backgroundFilters,filters,compositingFilter或蒙版值的圖層。

(來自the CALayer docs)。

更多信息也可在此技術答疑&答:http://developer.apple.com/library/ios/#qa/qa1703/_index.html

如果您的應用程序不會應用商店,你可以使用無證UIGetScreenImage API:

// Define at top of implementation file 
CGImageRef UIGetScreenImage(void); 

... 

- (void)buttonPressed:(UIButton *)button 
{ 
    // Capture screen here... 
    CGImageRef screen = UIGetScreenImage(); 
    UIImage* image = [UIImage imageWithCGImage:screen]; 
    CGImageRelease(screen); 

    // Save the captured image to photo album 
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 
} 

(從John Muchow

但是,使用此API將使您的應用程序無法獲得批准。

我一直無法找到任何其他解決方法。