UILabel 的屏幕截图和 UIImageView 中的内容

Posted

技术标签:

【中文标题】UILabel 的屏幕截图和 UIImageView 中的内容【英文标题】:ScreenShot of an UILabel and what is in a UIImageView 【发布时间】:2016-04-06 19:21:40 【问题描述】:

我正在尝试截取我的 UIImageView 和其上的 UILabel 的屏幕截图。

到目前为止,我在 ImageView 中抓取 UIImage,然后在其上渲染叠加层,但 UILabel 的定位都是错误的。我将捕获的大小设置为实际图像大小(这不是我想要的)。

我只是希望能够截取屏幕上显示的确切内容。

CGSize imageSize = self.imageFromOtherView.size;
// define the size and grab a UIImage from it
UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);

[self.imageFromOtherView drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];

[self.socialLabel.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

【问题讨论】:

您想要获取整个窗口的屏幕截图还是仅屏幕上的图像?从您的问题中很难看出。 【参考方案1】:

创建一个 UIView 来保存 UIImageView 和 UILabel。然后通过此代码传递此容器视图。我将视图作为一个名为 viewForPhoto 的属性,因此当调用代码时,它只会捕获该视图。您可以调整它以使其接收视图。这将返回您想要的 UIImage。

- (UIImage *)imageByRenderingView

    UIGraphicsBeginImageContextWithOptions(self.viewForPhotoView.bounds.size, NO, 0.0);
    [self.viewForPhotoView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resultingImage;

【讨论】:

【参考方案2】:

将这两个视图添加到一个公共容器视图中,然后在视图上调用- (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates 以在上下文中呈现它。

【讨论】:

以上是关于UILabel 的屏幕截图和 UIImageView 中的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何使用情节提要设置包装文本 UILabel Xcode

如何将 UILabel 文本顶部和底部空间居中

无法让 UILabel 显示在 UIView 之上

UILabel 和 UIButton - 截断标签而不是按钮

截取 UIImageView 和 UILabel 的截图然后分享

UILabel NSTextAlignmentRight 不起作用?