2015-01-15 86 views
1

我正在尝试截取屏幕截图并截取该屏幕截图的一部分。 截图部分工作完美,但我不能让裁剪部分工作。在swift中裁剪屏幕截图

var image = self.view?.pb_takeSnapshot() 

let croprect = CGRectMake(view.bounds.width/2, view.bounds.height/3.8, 
       view.bounds.width/2, view.bounds.height/3.5) 

    var imageRef = CGImageCreateWithImageInRect(CGImage(image), croprect) //Error: CGImage cannot be constructed because it has no accessible initializers 
    var croppedImage = UIImage(CGImage: imageRef) 

函数,它的截图:

func pb_takeSnapshot() -> UIImage { 
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.mainScreen().scale); 

    self.drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true) 

    // old style: self.layer.renderInContext(UIGraphicsGetCurrentContext()) 

    let image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 

我的问题:有没有办法做到这一点,而无需使用CGImage,或者是有一个UIImage的转换为CGImage一个简单的方法?

+0

尝试......'image.CGImage '? – Jack 2015-01-15 16:49:06

+0

错误:UIImage?没有名为CGImage – sdd 2015-01-15 16:50:42

+0

的会员我看,这是一个可选项!所以'图像?.CGImage' – Jack 2015-01-15 16:51:11

回答

1

UIImage在大多数情况下包含您可以直接访问的CGImage

在你的情况image使用可选的链接设置,是UIImage?类型的,所以你将需要:

UIImage?.CGImage

访问CGImage

+0

一个简单的问题:GameScene中的frame.size具有比GameviewController中的view.bounds更多的值。我可以在gameviewcontroller中使用什么来在gamescene中获得与frame.size相同的值? – sdd 2015-01-15 17:23:59

+0

你能从GameViewController访问GameScene吗?如果没有,我不能真正帮助你因为我不太熟悉SceneKit/SpriteKit :(发表一个新问题! – Jack 2015-01-15 17:25:31