在我的应用程序中,我创建了一个CALayer(带有几个子层——CALayer由作为子层添加的形状组成).

我试图创建一个UIImage,我将能够上传到服务器(我有这个代码).

这可能吗?

推荐答案

听起来像是要将图层渲染成UIImage.在这种情况下,下面的方法应该可以做到这一点.只需将其添加到视图或控制器类,或在CALayer上创建一个类别.

Obj-C

- (UIImage *)imageFromLayer:(CALayer *)layer
{
  UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0);

  [layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  return outputImage;
}

Swift

func imageFromLayer(layer:CALayer) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(layer.frame.size, layer.isOpaque, 0)
    layer.render(in: UIGraphicsGetCurrentContext()!)
    let outputImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return outputImage!
}

Objective-c相关问答推荐

警告:格式字符串不是字符串文字(可能不安全)

等到多个网络请求都执行完毕 - 包括它们的完成块

将 CSS 插入 UIWebView / WKWebView 中加载的 HTML

在 UITableViewCells 上显示复制弹出窗口的简单方法,如地址簿应用程序

是否可以将 NSInteger 转换为 NSNumber?

常量的 k 前缀从何而来?

带有语法高亮的 UITextView

以原子方式写入文件与不写入文件之间的区别

iOS - 应用程序关闭时的核心位置和地理围栏

在 iOS 和 Mac OS X 应用程序中使用 C++

如何隐藏/显示导航栏中的右键

如何在 iPhone 上画出讲话泡泡?

iPhone - 时区便利方法之间的差异

获取包含在 NSString 中的文件的扩展名

在 switch 语句中使用 NSString

如何在 Xcode 7 中启用_BITCODE?

iOS:开源 VoIP/SIP Objective-C 代码

即使在静音模式下也能在 iPhone 上播放声音

UIScrollView contentSize 不起作用

如何根据按钮按下重新加载/刷新 UIPickerView(带有新数据数组)?