如何在自定义 UIView 上显示 CGPoints

2024-01-07

我有一个小项目,它代表一个带有报告的应用程序,用户可以在其中绘制自定义报告CanvasView然后选择绘制的每个涂鸦。当用户单击“保存”时UIButton该报告将被序列化并保存在CoreData。 当用户单击任何报告进行查看后,该报告将被带到DetailsVC报告将从哪里反序列化CoreData并且能够看到上面的涂鸦CanvasView但不再画画了。 问题是没有向我展示上面的涂鸦CanvasView(DetailsVC)但在控制台中说涂鸦数组不为空并且是从CoreData.

编辑:我认为问题出在下面的行上,我认为正在遍历一个空数组并尝试附加CGPoints但我不知道如何解决它。任何人都可以帮我实现这样的功能:

func parseScribbleData(_ bytes: [UInt8]) -> [[CGPoint]] {

}

https://github.com/tygruletz/SelectScribbles/blob/master/SelectScribbles/Communications/TTableDeserializer.swift#L34 https://github.com/tygruletz/SelectScribbles/blob/master/SelectScribbles/Communications/TTableDeserializer.swift#L34

这是我的演示项目:https://github.com/tygruletz/SelectScribbles https://github.com/tygruletz/SelectScribbles

Here is a record to reflect the bug (missing CGPoints from CanvasView): enter image description here

以下是我反序列化 Scribbles 的方法:

class TTableDeserializer: NSObject {

    static let sharedInstance = TTableDeserializer()

    // Deserialize all the damageItems recorded from the Report
    func deserializeDamageItemsFor(report: DefectReport) -> [DamageItem] {

        let damageLinesTTable: TTable = TTable(binaryTable: Data(), format: .bin1)
        var damageItems: [DamageItem] = []

        // Get the DamageList with damage items for selected Report.
        damageLinesTTable.deStreamBin(binaryData: report.damageLines ?? Data(), format: .bin1)

        damageLinesTTable.tableRows.forEach { row in

            var damageItem: DamageItem = DamageItem(name: row.cell[0].sData,
                                                    scribbles: [])

            // All Scribbles
            var allCGPoints = [[CGPoint]]()

            damageItem.scribbles.forEach { scribble in

                var scribbleCGPoints = [CGPoint]()
                scribble.forEach { coordinate in

                    let point = CGPoint(
                        x: CGFloat(UInt8(row.cell[3].iData())),
                        y: CGFloat(UInt8(row.cell[3].iData()) & (~0 >> 1))
                    )
                    scribbleCGPoints.append(point)
                }
                allCGPoints.append(scribbleCGPoints)
            }

            damageItem.scribbles = allCGPoints

            damageItems.append(damageItem)

            print("----------   DESERIALIZATION FOR DAMAGE ITEM '\(row.cell[0].sData.capitalized)' STARTED..........  ----------")
            print("Dmg Item Name:     \(row.cell[0].sData)")
            print("Dmg Item Scribble: \(row.cell[1].binData())")
            print("----------   DESERIALIZATION FOR DAMAGE ITEM '\(row.cell[0].sData.capitalized)' ENDED  ----------\n\n")
        }
        return damageItems
    }
}

感谢您阅读本文!


See 这个拉取请求 https://github.com/tygruletz/SelectScribbles/pull/1其中解决了几个问题:

  • 我们希望以捕获涂鸦数组的方式对 CoreData 中的损坏数组进行编码。现在您似乎想要存储一个整数数组,并且您确实想要捕获它[[CGPoint]]内的结构DamageItem.

  • 最简单的方法是使DamageItem符合Codable然后用标准基金会编码器替换所有复杂的编码(我使用JSONEncoder/JSONDecoder).

    这不仅体现了它的丰富性DamageItem正确,但从根本上简化了编码/解码过程;

    编码只是:

    report.damageLines = try JSONEncoder().encode(damages)
    

    解码就是:

    let items = try JSONDecoder().decode([DamageItem].self, from: report.damageLines)
    
  • 如果你想要你的DetailsReport视图控制器享受“选择损坏并突出显示适当的涂鸦”功能(就像我们一样 https://stackoverflow.com/q/58435138/1271826为您CreateReport),您需要更新自定义表格单元格以捕获选定的损坏并将其传递给CanvasView.

    你也会想要didSelectRowAt in DetailsReport重新加载第一部分(这样您就可以看到所选的损坏)。


无关的,我还建议:

  • Move UIBezierPath模型文件夹中的例程(因为它不是模型)。

  • 也动起来CanvasView into View出于同样的原因文件夹。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在自定义 UIView 上显示 CGPoints 的相关文章

  • iOS 10 的错误? NSDate 日本地区时间描述和 24 小时休息

    这似乎是 iOS 10 的一个错误 在 iOS 8 和 9 中都可以 NSDate date description 的小时描述是错误的 它附加了 24 小时描述和 12 小时描述 我没有使用 NSDateFormatter 只是默认设置
  • 由于语言错误,Itunes Connect 无法提交

    Thats all it shows https i stack imgur com 0aZm8 png 我不确定它没有告诉我出了什么问题 it shows its linked to the language https i stack
  • 如何在 Swift 3 中解析 JSON 数组 [重复]

    这个问题在这里已经有答案了 我从 Socket 获取了一些我想访问的数据 但收到错误消息 指出每次都无法将 NSArray 转换为 NSDictionary struct SocketEventHandler let event Strin
  • 自动布局、UIDynamics 和动画

    我对自动布局还很陌生 并且对如何为视图设置动画感到困惑 我读了很多 我知道你必须遵守限制 编辑它 然后包装layoutIfNeeded in an UIView动画块 但当真正要做的时候 我却有点失落 我很乐意有人能向我解释如何做这个动画
  • UITextFieldDelegate 与 UITextField 控件事件

    如果我想处理 UITextField 的更改 例如用户在其中键入 看起来这可以通过将委托分配给该文本字段 然后让委托实现 shouldChangeCharactersInRange 来完成 或者通过将目标添加到文本字段并处理 UIContr
  • iOS 11 安全区域布局指南向后兼容性

    启用安全区域布局指南是否与 iOS 11 以下版本兼容 我设法使用新的安全区域布局指南并保持与 iOS 9 和 iOS 10 的向后兼容性 编辑 正如 NickEntin 的评论所指出的 此实现将假定存在状态栏 但在 iPhone X 的横
  • iOS 8 中的 UISplitViewController 状态恢复

    在 iOS 8 上 UISplitViewController 似乎可以保存和恢复其子视图的状态 例如 主视图是否隐藏 这是不可取的 因为我的应用程序应该始终以横向方式显示主视图 并始终以纵向方式隐藏它 如果用户以横向模式关闭应用程序 保存
  • 如何从代码隐藏中设置 CarouselView 的项目?

    我有一个 CarouselView 它绑定到图像的 ItemsSource 但我想通过更改 CarouselView 的索引来更改当前显示的图像 我尝试使用 CarouselView Position 作为必须选择的元素的索引 但不幸的是这
  • 如何请求用户开启定位服务

    我需要我的应用程序来访问用户的当前位置 它在应用程序开始时检查用户是否已设置 如果没有 我需要应用程序显示提示以使其使用位置服务 就像警报视图一样 点击按钮 它应该会带您进入 iPhone 上的位置服务屏幕 您可以通过以下代码检查 loca
  • 在后台任务中安排通知

    我正在为 iOS 开发一个日历 闹钟应用程序 它与网络服务器同步 当在服务器上添加活动时 会发出推送通知 以便 iOS 客户端可以获取新数据 并根据需要更新和安排下一次警报的时间 本地通知 但这仅在应用程序在客户端打开时才有效 我希望客户端
  • iOS UIButton 带有圆角和背景 bug

    我发现圆形 UIButton 存在一个奇怪的问题 这是我创建此按钮的代码块 let roundedButton UIButton type System roundedButton frame CGRectMake 100 100 100
  • 将 Xcode 的测试类助理编辑器与 Swift 类结合使用

    在 Xcode 中工作时 在助理编辑器中提取单元测试用例通常会很好 目前 我一直在手动选择测试文件 但我看到助理编辑器有一个选项Test Classes 我试图让这个选项自动提取我的测试文件 但我似乎无法让它工作 是否需要某种配置 它不适用
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • 线程 1:信号 SIGABRT - AppDelegate.h

    main m Journey Created by Julian Buscema on 2014 07 13 Copyright c 2014 Julian Buscema All rights reserved import
  • 我可以知道 requireGestureRecognizerToFail 到底会做什么吗?

    谁能告诉我下面的代码行到底会做什么 我已经提到过Apples https developer apple com library ios documentation uikit reference UIGestureRecognizer C
  • iOS WKWebView.scrollView委托导致BAD_ACCESS

    我的 viewController 有一个 UIView 属性 其中包含一个 WKWebView 我将 WKWebView rollView 委托设置为我的 viewController 它是我的 UIView 子类的公共函数 并在我的 v
  • 对使用phonegap和钛的质疑[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 最近我听说了 PhoneGap 和 Titanium 移动网络应用程序的开发 我分析了这两个 Web 应用程序 并了解了如何使用它们以
  • 应用程序未通过协同设计验证?

    我在提交 iPhone 申请时遇到问题 我看到了一些类似的问题 但没有找到答案 当我存档项目并单击 验证 时 收到错误消息 应用程序未通过协同设计验证 签名无效 或者未使用 Apple 提交证书进行签名 我假设我在协同设计部分做错了什么 我
  • Swift 中通过不同类调用委托方法

    我正在获取 JSON 菜单 一旦 JSON 返回 我想运行 menuReady 来更新表的内容在 SomeTableViewController 类中 但下面的代码似乎不起作用 AIM Run 菜单就绪 JSON 返回后更新内容 PROBL
  • 在 iOS 上从 GPS 获取时间

    我正在开发一个跟踪器应用程序 该应用程序需要高精度地了解设备位置 即它使用位置服务并忽略水平精度低于 20 米的位置 CLLocation没有明确声明是否通过 GPS 确定 但是 如果水平精度为 20 米或更好 则可以认为它是来自 GPS

随机推荐

  • 在 x86 程序集中声明数组

    我正在学习汇编 我需要制作一个大数组 我已经研究过如何声明数组 并且遇到了这个 array db 10 dup 其中声明了 10 个未初始化字节的数组 我尝试了这个并尝试组装它并得到 错误 操作数 1 之后需要逗号 我意识到 x86 不支持
  • 将div的内容保存到本地存储,并显示在另一个页面上

    我正在尝试获取 a 的内容 div 在页面加载的页面上 并将其保存到本地存储 当有人再次访问主页时 我想要这个内容div要显示 虽然我可以让函数与表单输入字段和提交一起使用 但我找不到仅使用内容和页面加载来使其工作的方法 任何帮助表示赞赏
  • 在 Pandas 中使散点图的标签垂直和水平

    我在用着Pandas绘制散点图矩阵 from pandas tools plotting import scatter matrix 问题是列中的名称DataFrame太长了 我需要它们在 x 轴上垂直 在 y 轴上水平 这样它们才能适合
  • Putty 谷歌云计算

    我对谷歌云和腻子很陌生 我的问题是当我在计算机上打开 putty 并在 putty 中输入外部 IP 时 我的屏幕打开并要求我登录 我的问题是我要输入什么才能登录 这是谷歌用户名帐户吗 更好的问题是我在哪里可以找到登录虚拟机所需的登录名和密
  • 如何将日期时间格式化为数据表中的特定日期格式

    在我的 datagridview1 中 日期列显示格式 MM dd yyyy hh mm ss 然后我使用这段代码 我使用一个函数来填充这样的 datagridview public void load table DataTable lt
  • 在 Redis 中使用嵌套对象?

    假设我有一个嵌套属性可以更改的哈希值 key1 prop1 subprop1 could change 如果我收到以下信息prop1 subprop1已更改 我可以对此属性执行原子更新吗 现在node redis saves prop1作为
  • 使用 Roslyn 拆分表达式语句

    我正在开发一个可以改写的应用程序CSharp代码 我正在这样做Roslyn 我面临着一个问题splitting expressions 样板课 class Program static void Main string args float
  • 如何自定义 git rebase --interactive 提交消息的格式?

    我使用 git 进行本地工作 并且非常喜欢它 并且遵循类似于中描述的工作流程本文 http reinh com blog 2009 03 02 a git workflow for agile teams html 所以基本上 当开始一个新
  • 分形编程[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 获取所有系统壁纸

    有没有办法以编程方式获取所有android系统壁纸 我知道如何通过WallpaperManager 然后将其保存到磁盘 但我想知道是否有一种方法可以访问操作系统中包含的所有用作系统壁纸的图片 所有壁纸都位于启动器应用程序中 由于启动器的名称
  • 如何在 Vue Web 组件中使用 vue-i18n?

    我正在使用 vue cli 3 创建一个 Vue Web 组件 target wc选项 我还需要该组件来使用 vue i18n 插件 这需要将一些选项传递给主 Vue 实例 如下所示 new Vue i18n new VueI18n 在常规
  • 无法启动组件 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/JDBC_DBO]]

    我收到此 Tomcat 错误 Sep 09 2012 4 16 54 PM org apache catalina core AprLifecycleListener init Information The APR based Apach
  • 如何创建脚本来查询 Google 浏览器位置

    我正在尝试找出一种从 Google 浏览器位置 API 获取地理位置数据的方法 我发现JSON CURL 和 Google 的地理定位 https stackoverflow com questions 13433901 json curl
  • iOS 8 上弹出窗口中的 UIDatePicker 问题

    还有其他人在 iOS 8 上的弹出窗口中遇到 UIDatePickers 问题吗 突然我们的日期选择器无法正确显示 参见屏幕截图 似乎选择器的一部分没有显示 不过 您仍然可以与缺失的部分交互来更改时间 我做了一些测试 日期选择器在其他视图中
  • 在draw_networkx可视化中突出显示节点而不更改节点颜色

    我正在使用 NetworkX 来可视化包含超过 1000 个节点的大型图 作为可视化的一部分 我希望能够突出显示某些节点 我见过这个问题 https stackoverflow com questions 27030473 how to s
  • 控制台上的 gcc 编译输出消息中出现奇怪的字符

    当我使用 gcc 构建 C 代码时 在 Ubuntu 10 04 x32 位系统上的 bash shell 下生成如下 Makefile gcc 输出消息在输出消息中包含一些不需要的字符 见下文 test dualboot desktop
  • 如何以编程方式添加安全区域

    当你打开视图时 它将如下图所示 iPhone x 打开视图 https i stack imgur com GJ8uy png iPhone 8 打开视图 https i stack imgur com Y1T74 png 对于 iphon
  • next-i18next 使用 Link 和 jest 进行单元测试错误“无法读取未定义的属性语言”

    next i18next使用它自己的Link组件与区域设置子路径兼容 https github com isaachinman next i18next https github com isaachinman next i18next 当
  • 如何将 Stream 转换为对象

    如何将流转换为对象 我有一个WebApi HttpGet public AttachmentViewModel DownloadAttachementDetailsByIds int attachementDetaisId Attachme
  • 如何在自定义 UIView 上显示 CGPoints

    我有一个小项目 它代表一个带有报告的应用程序 用户可以在其中绘制自定义报告CanvasView然后选择绘制的每个涂鸦 当用户单击 保存 时UIButton该报告将被序列化并保存在CoreData 当用户单击任何报告进行查看后 该报告将被带到