我想在iOS应用中截取屏幕的特定部分。附加的图像是屏幕的一部分。在这里,我想截取包含3个UIImageViews的红色标记矩形区域的屏幕截图,其中包含背景处的白色图像帧,带有咖啡杯的图像和咖啡上的苹果标志图像。
我正在使用以下代码来执行此操作...
- (UIImage *)captureView:(UIView *)view withArea:(CGRect)screenRect {
UIGraphicsBeginImageContext(screenRect.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, screenRect);
[view.layer renderInContext:ctx];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage ;
}
像这样调用
UIImage *viewImage = [self captureView:self.FrameImageView withArea:self.FrameImageView.bounds];
此处FrameImageView是一个UIImageView,它在背景中包含白色图像框。
但我得到的结果如下图所示。
我认为问题是,我的代码是截取FrameImageView层的截图。这就是为什么我只获得背景框架。但是我希望屏幕截图在FrameImageView上包含其他2个UIImageViews,就像第一个图像的红色矩形部分一样。
任何人都可以帮助我,如何解决这个问题。在此先感谢。
答案 0 :(得分:2)
尝试此变体
UIGraphicsBeginImageContextWithOptions(FrameImageView.frame.size, YES, 4);
[_myStreetView drawViewHierarchyInRect:FrameImageView.frame afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *img = [[UIImageView alloc] initWithImage:image];
答案 1 :(得分:2)
试试这个:
- (UIImage*)captureView:(UIView *)yourView {
CGRect rect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[yourView.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}