Objective-C:捕获自定义框架内所有视图的屏幕截图 [英] Objective-C: Capture screenshot of all views within custom frame
问题描述
我有一个游戏,用户可以创建自定义级别并将其上传到我的服务器供其他用户玩,我想在用户测试他/她的级别上传到我的服务器之前获取操作区域的屏幕截图作为一种预览图像。
I have a game where users can create custom levels and upload them to my server for other users to play and I want to get a screenshot of the "action area" before the user tests his/her level to upload to my server as sort of a "preview image".
我知道如何获取整个视图的屏幕截图,但我想将其定义为自定义框架。请考虑以下图片:
I know how to get a screenshot of the entire view, but I want to define it to a custom frame. Consider the following image:
我想用红色区域截取屏幕,即动作区域。我可以实现这个目标吗?
I want to just take a screenshot of the area in red, the "action area." Can I achieve this?
推荐答案
只需要在你想要捕获的区域做一个矩形并通过矩形方法。
Just you need to make a rect of the area you want to be captured and pass the rect in the method.
Swift 3.x:
extension UIView {
func imageSnapshot() -> UIImage {
return self.imageSnapshotCroppedToFrame(frame: nil)
}
func imageSnapshotCroppedToFrame(frame: CGRect?) -> UIImage {
let scaleFactor = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(bounds.size, false, scaleFactor)
self.drawHierarchy(in: bounds, afterScreenUpdates: true)
var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
if let frame = frame {
let scaledRect = frame.applying(CGAffineTransform(scaleX: scaleFactor, y: scaleFactor))
if let imageRef = image.cgImage!.cropping(to: scaledRect) {
image = UIImage(cgImage: imageRef)
}
}
return image
}
}
//How to call :
imgview.image = self.view.imageSnapshotCroppedToFrame(frame: CGRect.init(x: 0, y: 0, width: 320, height: 100))
目标C:
-(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;
}
//How to call :
imgView.image = [self captureScreenInRect:CGRectMake(0, 0, 320, 100)];
这篇关于Objective-C:捕获自定义框架内所有视图的屏幕截图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!