swift html编辑器,SwiftUI 的可视化编辑工具

原标题:SwiftUI 的可视化编辑工具

作者:希德,iOS 开发者,前“有经验的前端开发工程师”,就职于网易严选。正在写书《Thinkable SwiftUI》(严重拖稿中)

Session 10185: https://developer.apple.com/videos/play/wwdc2020/10185

前言

SwiftUI 带来的描述性构建界面能力,为 Xcode 引入诸多的可视化工具奠定了基础。可视化界面搭建,早期在网页开发中,曾经流行过,最著名的代表 Dreamweaver。如果把 HMTL 源码视为因,那么浏览器渲染的界面则为果。从最后的界面上修改,反馈到源代码,这个过程非常直观,也高效(得益于 HTML 可以及时渲染)。人人都想可视化搭积木式编码, Apple 在可视化编程上从一开始就有布局—— xib、Storyboard ,至今还在迭代。但不得不承认,Storyboard 编程范式在 iOS 领域并不是主流。如果 Dreamweaver 为代表的所见即所得(WYSIWYG )编辑器没落是因为从因到果逆方向,生成的代码质量不高。而 xib、Storyboard 无法成为主流的一大原因是中间层 —— xml 中间层的引入的复杂度。

如果让我对可视化实现打分: SwiftUI 8 分;xib、Storyboard 3 分。

7cfcccd110b4b39d2bf502142667fb12.png

SwiftUI 继承了 html 的界面描述能力也实现可直接运行的能力。

SwiftUI 的可视化工具

总结下,主要有 4 类:

SwiftUI 源码

Canvas

Inspector

Library(包含自定义库对象)

Hold Command + Click 呼出的 actions 浮层可和 1、2 组合出现。

SwiftUI 源码

SwiftUI 源码描述界面的层级,在 Xcode 里,我们通过代码可以了解到我们应用的入口是 App 对象,结合 SwiftUI 里 view 对象的组合,最终是一个树形,这棵树和 Xcode 里 debug 时的视图层级是一致的(和 App 内部渲染的 layer 不一致)。

547492a0b90591a82e1b8a0ab42231b6.png

在 Editor 里你除了可以通过手动编辑 SwiftUI 源码来修改视图层级之外,你还可以借助 Hold Command + Click 呼出的 actions 浮层来可视化的辅助生成 SwiftUI 源码,其中包括对 View 和 Modifier 的 attribute inspector 修改,后面会详细说。

SwiftUI 源码是所有可视化编辑的 The source of truth。所有的功能都可以在 SwiftUI 里实现。相比较它,Canvas 的功能更直观,但功能受限,如在 Canvas 里你无法删除 Modifier

同时,SwiftUI 源码接收来自从 Library 里拖拽或者双击导入的 Views 和 Modifiers、以及图片等资源,从而快捷引入视图,以及批量修改样式。

注:在源码里所有改动都会同步 Canvas 和 Inspector ,反之亦然

Canvas

Canvas 在 Xcode 11,早期 beta 版本里叫 Preview,正如其名,它是 SwiftUI 源码实际效果的 hot reload 的展示区。除了他作为一个全屏容器供所有被 preview 的视图来渲染外,在 Xcode 12 里引入了 various preview-centric capabilities ,把 Xcode 11 我们在 Preview 常用的一些环境变量修饰符(主要是 Color Scheme、Dynamic Type),这些功能我们可以手动在代码里实现,现在被移动到 Canvas,加入到 Inspect Preview 和 Duplicate Preview ,作为快捷方式。

小贴士:我曾经尝试使用 SwiftUI 来 Hot Reload Objective-C[1] 的代码,在小项目也还是可以用的。

在 Canvas ,你可以使用 Library 来引入新的视图元素,你也可以删除它;使用 Library 引入修饰符,但不能删除。

小贴士:引入的图片资源总是默认显示为图片实际大小

通过在 Canvas 里双击元素选中,在右侧的 Inspect 里修改。如果选中的是文字,可以在 Editor 里直接修改文本内容。 Command + D 快速复制视图对象。

同样,你还可以借助 Hold Command、Click 呼出的 actions 来可视化的辅助生成、修改视图。

目前支持的 actions 包括;

包裹在 HStack 容器里

包裹在 VStack 容器里

包裹在 List 容器里

包裹在 Group (非容器)里

引入条件

使循环 n 次 (默认 5 次)

呼出本视图元素的 Inspector(这样可以隐藏最右侧的 attribute inspector 最大化屏幕利用率)

小贴士:在 SwiftUI 源码 Editor 里 actions 会比较多,多一些 extract 的方法。

Canvas 常规的显示规则是,总是显示当前编辑器里可预览的文件,使用左下角的 Pin Preview,可以在切换不同文件的时保持显示被 pin 时候的 Preview 界面。

小贴士:快速刷新 Canvas 快捷键: Option + Command + P

现在的 Inspect Preview 里设置 frame 有问题,显示数字的地方位置不够,导致你输入 300 这样的三位数时,会误会因为被清空为 0。

60031e17880ea1c50d93d0dcaa67c37a.png

在日常的使用里,你经过会遇到 Canvas 不能工作的问题,如

需要你生成 crash report ,然后查阅 .crash 文件,大部分是运行时错误、编译错误,没有地方抛给开发者。

Application Specific Information:

Fatal error: Unexpectedly found nil while unwrapping an Optional value: file /Users/hite/workshop/WWDC20/WWDC20/RowItem.swift, line 50

Attribute Inspector

Attribute Inspector 和其他可视化编辑器的属性编辑器一样,作为上下文敏感的编辑入口,修改源码、修改 Canvas 里的显示。

6c5745248fc26bd1cccd4a082d593e34.png

默认的 attribute 显示 4 个对象,视图类型、Padding、Frame、Add Modifier。其中Add Modifier 包含最丰富的内容,当不知道当前选中的对象有哪些方法时,Add Modifier 的弹窗是个非常好的查询入口。Xcode 自动把 Modifier 分为:

Control (多为可响应用户事件的元素)

Layout(布局、背景、大小尺寸信息)

Effect(颜色对比、渐变、形变等)

Event (显示隐藏、通知到达等)

Style(系统组件的默认样式配置)

很明显,你可以自定义的部分是 Control LayoutEffect ,这也是自定义 Library 对象里可设置为 category 的枚举。关于自定义 Library 对象,请参阅 Session 10649 - Add custom views and modifiers to the Xcode Library[2] 。

在 Inspector 最上面的 View 属性那里,会展示一些奇怪的东西。这些是 SwiftUI 默认展示的 View 初始化方法的参数,部分参数还可容许修改。

28bf70434401df0fa66f2fe74784e97b.png

在 Inspector 里,可以通过不选中对应的约束来删除不需要的属性。在 Canvas 里唤起的 Inspector 浮层还可以通过点击选项后面的蓝色 X 号,修改为视图默认样式。

2e2ed4cf2b6828b37c1f0cf18645d122.png

总结

在 Xcode 里熟练掌握快捷键 Hold Command + Click (呼出 actions 弹窗)、 Command + Shift + L (打开 Library 浮层)、 Command + Shift + P (重新渲染 Canvas)和 actions 、 add Modifier 搜索入口,让你在编写代码时,事半功倍,发挥 WYSIWYG 可视化工具的最大效能。

限时福利

这篇文章的内容来自于 《WWDC20 内参》。在这里给大家推荐一下这个专栏。

WWDC 内参系列是由老司机周报、知识小集合以及 SwiftGG 几个技术组织发起的。 已经做了几年了,口碑一直不错。主要是针对每年的 WWDC 的内容,做一次精选,并号召一群一线互联网的 iOS 开发者,结合自己的实际开发经验、苹果文档和视频内容做二次创作。

今年一共有 213 个 Session 的内容。《WWDC20 内参》挑选了其中的 135 个 Session,已经创作了 92 篇文章。 目前正在限时优惠销售,只需要 9.9 元,十分优惠。

参考资料

[1]

Hot Reload Objective-C: https://github.com/hite/OC_Previewable

[2]

Session 10649 - Add custom views and modifiers to the Xcode Library: https://developer.apple.com/wwdc20/10649 返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在百模大战中AI行业发展有何新趋势?

前言 在百模大战中,AI行业的发展正在经历前所未有的变革。这场竞争不仅推动了AI技术的快速发展,也揭示了AI行业的新趋势。这些趋势不仅影响着我们如何看待和使用AI,也预示着AI未来的发展方向。在这个快速发展的领域,了解这些新趋…

如何备份数据_如何通过归档、备份和灾难恢复实现多云数据保护

点击上方“蓝色字体”,选择 “设为星标”关键讯息,D1时间送达!为了提高业务连续性并更好地控制成本,企业将在2020年向IT专业人员施加压力,要求他们打破内部和外部基础设施之间以及公共云提供商离散环境之间的孤岛。为此…

清华大学计算机专业高中选课系统,【清华大学计算机实验教学中心】_清华大学计算机实验教学中心...

计算机实验教学中心面向全校所有专业本科生开课,每年开出计算机实验教学课超过7000人门,完成实验学时数逾750000.计算机学科是一门理论与实践结合得非常紧密的学科,因此实验教学中心的教学指导小组在教学实践中归纳出一套计算机学科特有的实验教学模式:除了独立设置的部分专题实…

机器人测钢卷直径_酒钢碳钢冷轧钢卷自动焊接机器人上线

10月18日消息,在酒钢集团宏兴股份公司碳钢薄板厂冷轧生产现场,一款白色自动焊接机器人上线作业。“这款机器人可进一步降低职工劳动强度,保证职工作业安全,最重要的是能够代替人工完成有害环境下的作业。”该厂电气责工刘世忠介绍…

html ace编辑器,Tiny-editor

Tiny-editor是和jsFiddle一样具有在线运行js功能的在线代码编辑器,基于Ace。Usage1.下载slidePagegit clone https://github.com/lipten/Tiny-editor.git2.引用相关文件3.引用js文件4.html结构//--html结构比较复杂,看下载后的editor.html比较完整5.初始…

树展示 移动端_百度移动端开始用网站品牌名代替网址显示

最近,有站长发现,百度移动端最近做了部分改版:移动端部分网站域名开始逐渐被网站相关名称代替,PC端还是用域名展示,卢松松博客网站域名也被替换成网站品牌名显示!点击添加图片描述(最多60个字)编…

html视频标签略缩图,JS可以截取video的标签视频缩略图吗?

这次给大家带来JS可以截取video的标签视频缩略图吗?,JS截取video的标签视频缩略图的注意事项有哪些,下面就是实战案例,一起来看一下。JavaScript截取video标签视频缩略图,前几天做个小项目以瀑布流加载MP4视频,一个页面差不多会加…

cp命令显示进度条_利用rsync命令和scp命令实现本机带进度条提示拷贝

rsync命令#rsync -av --progress /mnt/yidong2/full20100526.tar.gz /mnt/yidong1/[以上命令] 可以实现本机带进度条提示拷贝,可以实现不同机器带进度条提示拷贝,可以拷贝多个文件scp命令#scp -v /mnt/yidong2/full20100526.tar.gz /mnt/yidong1/[以上命…

HTML用css让input无法使用,html – 是否可以使用CSS设置一个禁用的INPUT元素?

我需要设置禁用的< select>元素,使其看起来像启用它们.有人可以帮忙吗&#xff1f;PS.我完全知道对HCI原则等做这样的事情的缺点,但是它的要求,所以我必须做,如果可能的话…谢谢.编辑&#xff1a;AlexThomas’方法在HTML代码中禁用元素时效果很好,但不幸的是我正在使用JQ…

python framework threads_Python - 多线程

当我们写的程序需要并发时&#xff0c;我们就需要用到 Python 中的一些并发库&#xff0c;例如 asyncio、thread、 multiprocessing 等&#xff0c;本文主要介绍 Python 标准库中的多线程库 threadthreading 基本使用使用多线程的优势在于程序运行更快适用于 IO 密集的场景Pyth…

计算机关机键桌面,电脑桌面按钮关机关不了怎么办? 爱问知识人

【问题描述】:屏幕抖动,显示异常【原因分析】:1。 显卡驱动异常2。 显示器和主机的连接线虚接3。 显示器本身出现故障【简易步骤】:1。打开【60软件管家】—【软件卸载】2。 【我的电脑】—右击—【管理】—【设备管理器】—右键【卸载】【操作步骤】:方案一&#xff1a;卸载显…

如何快速的学习html5,高效快速学习HTML5的技巧

HTML5是非常新前端必备技能&#xff0c;作为第五代HTML语言&#xff0c;包含的算法、实现的功能都大大超过从前。不同的人学习效率、成果都各不相同&#xff0c;那么如何高效快速学习HTML5呢&#xff1f;学码思前端开发培训老师给大家分享一些小技巧&#xff0c;一起来看看吧。…

java格式化日期时分秒_java怎么格式化时间类型的时间,结果要求是时间类型

你好小SongSimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");1.Calendar 转化 String//获取当前时间的具体情况,如年,月,日,week,date,分,秒等Calendar calendat Calendar.getInstance();SimpleDateFormat sdf new SimpleDateFormat("yyyy…

云南大学计算机网络期中考试刘春花,实验九基于CRC编码的检错程序的实现.doc...

实验九基于CRC编码的检错程序的实现.doc云南大学软件学院实 验 报 告课程 计算机网络原理实验 任课教师 刘春花&#xff0c;刘宇 姓名 学号 专业 成绩 实验九、链路层实验基于 CRC 编码的检错程序的实现实验报告一、实验目的1、通过实验&#xff0c;掌握 CRC 编码和解码的原理。…

分享到facebook没有封面图_拾柒自制书封面图分享~

最近大家都在写书 我自己写完收集了很多图片和文字素材现在拿出来分享给大家~希望你们可以用的到分享几张时候做封面的图片给大家哈&#xff01;还有特别多文字素材 大家需要也可以分享给大家呀&#xff01;祝大家都能幸福快乐❤️

桌面计算机盖帘,一种可调节高度的计算机显示器支架的制作方法

本实用新型涉及计算机硬件领域&#xff0c;尤其是一种可调节高度的计算机显示器支架。背景技术&#xff1a;随着科技的进步&#xff0c;社会的发展&#xff0c;人们的生活水平得到了很大的提高&#xff0c;计算机对人们已不再陌生&#xff0c;几乎每家必备一台。通常情况下&…

win10软件拒绝访问删不掉_Win10右键菜单添加“获取文件管理员权限”选项

文件访问被拒绝&#xff0c;你需要TrustedInstaller提供的权限才能对此文件进行更改/文件访问被拒绝&#xff0c;你需要权限才能执行此操作/你需要提供管理员权限才能移动此文件”两种方案一长期为Win10右键菜单添加“获取文件管理员权限”选项 - Windows10.Pro​www.windows10…

计算机网络主观论述题,《计算机网络》论述题

匿名用户1级2018-11-15 回答1&#xff1a;时分多路复用为了提高线路利用率&#xff0c;总是设法在一堆传输线路上&#xff0c;传输多个话路的信息&#xff0c;这就是多路复用。多路复用通常有频分制、时分制和码分制三种。频分制是将传输频带分成N部分&#xff0c;每一个部分均…

db2中null和空值的区别_MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?

作者&#xff1a;极客小俊 一个专注于web技术的80后我不用拼过聪明人&#xff0c;我只需要拼过那些懒人 我就一定会超越大部分人!知乎极客小俊&#xff0c;官方首发原创文章浅谈 NULL 和 空值的区别NULL也就是在字段中存储NULL值空字符串值也就是字段中存储空字符()我们来通过测…

计算机视觉实验数学形态学,计算机视觉形态学边缘检测.doc

实验二 形态算子一、实验目的与要求目的&#xff1a;学习常见的数学形态学运算基本方法&#xff0c;了解腐蚀、膨胀、开运算、闭运算取得的效果&#xff0c;培养处理实际图像的能力。要求&#xff1a;上机运行&#xff0c;调试通过。二、 实验设备&#xff1a;计算机、Matlab软…