【问题标题】:Limited number of views in Swift PlaygroundsSwift Playgrounds 中的视图数量有限
【发布时间】:2023-04-10 21:47:02
【问题描述】:

在创建打算在 iPad 应用程序上使用的新 Swift Playground / .playgroundbook 时,我经常收到错误消息:

“运行 Playground 时出现问题。运行此 Playground 时遇到问题。请检查您的代码是否有错误。”

我可以追踪此问题是由于将某些子视图添加到我的实时视图时引起的。更准确地说,我的目标是将 UIImage 拆分为多个部分并为它们创建新的 UIImageViews:

for x in 0..<parts {
    for y in 0..<parts {
        //Create UIImageView with cropped image
        let pieceView = UIImageView.init(frame: CGRect.init(x: CGFloat(x)*singleSize.width, y:CGFloat(y)*singleSize.height, width: singleSize.width, height: singleSize.height))
        let imageRef = image.cgImage!.cropping(to: CGRect.init(x:0, y:0, width: 100, height: 100));
        pieceView.image = UIImage.init(cgImage: imageRef!)
        //Add them to an array
        self.viewArray.append(pieceView)
    }
}

这就是事情变得对我来说非常棘手的地方:现在添加 7 个这样的 UIImageView 可以正常工作。但只要我想添加 8 个或更多,playground 就会停止工作并给出错误消息“Problem running playground...”(见上文)

到目前为止我测试的内容:

  • 添加具有相同图像的 UIImageViews 不会导致此问题
  • 在后台线程中裁剪 UIImage 并在主线程中添加视图也无济于事
  • 创建 UIImageViews 而不将它们添加到实时视图不会导致任何问题
  • 代码在 Mac 操场上执行时运行良好,无论要添加多少人视图

【问题讨论】:

  • 遇到同样的问题!如果您找到了明确的解决方法,请告诉我。
  • 尚未解决此问题。作为一种解决方法,我切换到 SpriteKit,在那里我用我想要使用的图像初始化 SKNodes。这样,我可以根据需要添加任意数量的图像...
  • 聪明!感谢您的更新。

标签: ios swift ipad uiimage swift-playground


【解决方案1】:

我在添加多个 UI 元素时遇到了这种 iPad Swift Playground 运行时错误。

由 Playground 属性中的“Enable Results”默认设置为 ON 引起的问题。 “启用结果”预览所有内联对象结果的查看器。当您生成许多 UI 元素时,它会使 swift playground 崩溃。

尝试禁用“启用结果”。这个对我有用。

【讨论】:

  • 如果您尝试在 Playground 中编写 swiftUI 代码。 “做到这一点。”让 swiftui 运行。在我关闭“启用结果”之前,我无法渲染超过 2 个 tabitem 的 Tabview。我通过在 xcode 中重新创建并选择“Step Slowly”来验证我的代码是否有效,我的一些视图被渲染为 x4,但它最终在 5 分钟后工作。关闭“启用结果”并立即呈现视图
【解决方案2】:

我看到了一个类似的问题,问题是它只是 nil 使用不正确。
为了获得清晰的错误消息,只需创建一个包含相同文件的 Playground,然后在 Mac 上运行它:这样您可以获得有关正在发生的事情的更详细信息,并找到更容易解决您的问题。

如果您发现任何困难,请告诉我:)

【讨论】:

    【解决方案3】:

    可能是一个迟到的答案......但我上周遇到了同样的问题......今天终于弄清楚如何解决:

    我正在运行一段代码,我在其中添加了一个背景视图作为下一个:

    func createView(){
        // gray background
        let marco = CGRect(x:0, y: 0, width: 603, height: 825)
        vista = UIView(frame: marco)
        vista.backgroundColor = UIColor.gray
        vista.isUserInteractionEnabled = true
        vista.tag = 5
        PlaygroundPage.current.liveView = vista
        PlaygroundPage.current.needsIndefiniteExecution = true
    }
    

    但我把它放在代码的开头

    我改变的是:

    PlaygroundPage.current.liveView = vista
    PlaygroundPage.current.needsIndefiniteExecution = true
    

    将它放在所有代码的末尾,在您开始运行程序之前...如果您需要更多详细信息,请告诉我并可以分享更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多