Ios 在RubyMotion中捕获UIView

Ios 在RubyMotion中捕获UIView,ios,objective-c,ruby,uiimage,rubymotion,Ios,Objective C,Ruby,Uiimage,Rubymotion,我想将UIView捕获为UIImage。我尝试过很多事情,但我总是会犯这样的错误: <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. 我做错了什么?还有其他方法可以捕捉图像吗 谢谢。这是我用的 def self.convert_view_t

我想将UIView捕获为UIImage。我尝试过很多事情,但我总是会犯这样的错误:

<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
我做错了什么?还有其他方法可以捕捉图像吗

谢谢。

这是我用的

  def self.convert_view_to_image(view)
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0.0)
    view.layer.renderInContext(UIGraphicsGetCurrentContext())
    image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    image
  end

我怀疑,@elie teyssedou,您运行此代码的线程与此有关

我在拍摄“快照规范”(FBSnapshotSpec)时看到了这个错误,我很确定它没有在主线程上运行。我还没有测试这个理论,因为尽管有错误消息,代码实际上还是可以工作的


除此之外,您正在使用的代码看起来很好,因此我怀疑您正在运行的代码可能与环境有关。

这不是objective-c。这是swift吗?它产生了相同的结果,但无论如何,谢谢,现在我知道这不是一个常见的问题。虽然这个代码块可能会回答这个问题,但如果您能提供一些解释,说明为什么会这样做,那将是最好的。谢谢您的回答。您知道如何修复它吗?要在主线程上运行它,请在主线程上的调度队列中运行以下代码:
dispatch::queue.main.async Do…(屏幕截图代码)。。。结束
  def self.convert_view_to_image(view)
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0.0)
    view.layer.renderInContext(UIGraphicsGetCurrentContext())
    image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    image
  end