2013-03-22 36 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将使您的应用程序无法获得批准。

我一直无法找到任何其他解决方法。