区块链技术博客
www.b2bchain.cn

WWDC20 10148 – Inspect, Modify, and Construct PencilKit Drawings求职学习资料

本文介绍了WWDC20 10148 – Inspect, Modify, and Construct PencilKit Drawings求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

前言

在 WWDC 2019 上,苹果推出了 PencilKit。利用 PencilKit,开发者可以创建出很多精美的绘画、笔记等 APP,PencilKit 提供了丰富的好看而又逼真的“墨水”,可以提供最好的低延迟绘画体验。PencilKit 在 iOS 14 中提供了一些新的用户界面上的改进,有关这些改进的更多信息可以参考 WWDC20 10107 – What’s new in PencilKit,本文将不再详述这些内容。
本文主要围绕 PencilKit 绘图里面的内容展开:看看它们是由什么构成的以及你可以用它们来做什么。

Data Model Access

在 iOS 14 中,提供了 PencilKit 的数据模型内部的绘图、笔画、墨迹、路径以及点,这些将使得开发者利用 PencilKit 在自己的 APP 中构建一些出色的新功能。
通过对数据模型的访问,开发者可以检查用户所绘制的内容,对所绘制的内容进行一些处理:操作现有的绘图或者从头开始动态地创建新的绘图。

  • Access to the internals of PKDrawing (探索 PKDrawing 内部构造)
  • Synthesize new drawings (合成新的图形)
  • Inspect user created drawings (检查用户创建的图形)

下面用一个练字 Demo 来演示这些内容
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
练字 Demo 的主要功能:

  • 可以用键盘输入或者是直接用 Apple Pencil 书写创建你想要练习的内容比如 (Dinos Rule)
  • 模板也可以直接从外部进行导入
  • 可以设置需要练习的字体大小和难度等
  • 生成了练习模版后,你要抄的笔画由一个小红点进行动画演示如何去临摹一个字母
  • 如果临摹的东西接近模板上的字,临摹的笔记会变成绿色,可以接着临摹下一个字母,否则当前写的笔画消失,小红点指式的动画会重新开始
  • 最后能看到临摹的分数

上方 Demo 中所列出的书写、临摹、从文本中合成绘图并将绘图动画化以及对临摹的内容进行识别等功能都是最新的 PencilKit 提供的 (你可以通过访问 PencilKit 数据模型来实现),而这仅仅是一部分。下面来看看 PencilKit 绘图里面的内容:

Inside PKDrawing

下面两幅图,左边是一副简单的花的图片,右边是将花的绘制过程拆开后的内容

WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings => WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings


可以看到这幅简单的花的图画是由很多的 PencilKit 笔画构成的,每一个笔画都代表了用户绘制的一条单独的线
这些笔画是按照用户的绘制顺序进行展开的,很明显,用户首先绘制来花的轮廓然后再绘制花茎、叶子最后再用马克笔给花进行上色

Generating Drawings

下方是一张 26 字母表,包含了刚刚 Demo 演示的小写字母
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
那么我们怎么把将这张字母表生成文本呢?

  • 首先需要把这张图分割成一个个单独的字母
  • 然后将这些字母组合起来,生成用户需要练习的模板文本
// 将这幅画分割开来,把小写字母画出来,得到它们的笔画 // 对笔画数组进行分割得到每个字母的笔画 // 最后用它为没个字母创建新的绘图,对字母表中的每个字母都进行这样的操作即可 lowercaseDrawings = lowercaseLetterStrokeRanges.map { letterRange in     let letterStrokes = lowercaseABC.strokes[letterRange]     let letterDrawing = PKDrawing(strokes: letterStrokes)     return letterDrawing }

如果想检查或者修改一个绘图,就可以通过访问绘图的笔画数组来完成,当然,你也可以使用笔画从头开始创建新的绘图

PKStroke

PKStroke(笔画)包含了这些元素:pathinkmasktransform 以及 renderBoundsWWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings

path(PKStrokePath)

笔画的路径,主要描述来画笔的形状以及该形状沿路径变化时的外观,比如:笔画路径在某个时间,给出了的笔画的宽度

ink

墨水,描述了笔画的样子,笔画的颜色以及笔画的类型。ink 包含了墨水的种类和颜色,它没有宽度,笔画的宽度是沿着笔画的路径的变化而变化的

transform

笔画的变换,描述来笔画的方向和位置之间的转换

mask

笔画的蒙板

renderBounds

笔画的渲染界限,包含了整个笔画的边界,渲染界限解释了所有笔画属性的生效范围,包括 pathinktransform 以及 mask

PencilKit 笔画路径是 PencilKit 笔画点的统一立方体 B 样条,也就是说一个路径的内容,其实就是 B 样条的控制点
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings

for point in path {     draw(point) }

依次画出迭代路径上的每一个点,实际上这样画出的点并不在笔画上:
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
图中黄色的小圆点就是 B 样条控制点,这也许并不是你想画的,这时我们就需要对样条进行差值来得到实际路径上的点:用 interpolatedPoint strideBy 来访问这些点,这提供了一个点的序列,我们就可以像之前一样迭代,画出这些,于是就有了路径上的一系列点
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings

for point in path.interpolatedPoints(strideBy: .distance(50)) {     draw(point) }

例子中,在路径上的点的数量比较多,并且它们的艰巨是统一的,距离是 50 点,这个就是传递给方法的步幅参数
最后一个点的间距不是均匀的,这是因为无论步幅如何,笔画上的最后一个点总是生成的,你可以通过距离、时间或参数值来进行跨步操作。距离是绘图坐标中的点,时间是持续的时间 (以秒计算) 当然,这个取决于用户绘图的速度

参数值和 B 样条的参数差值有关

我们重新回到绘画的控制点,如果不绘控制点,需要使用 interpolatedPointat 得到参数值 0、1、2、3 等等的点绘制,这样可以得到于控制点等价的一些点,但是这些点其实是在路径上的。
这个很有用,如果为这些点标上数字,这样就可以理解是怎么回事了,这些数字实际上都是一个浮点值,这意味着开发者可以要求任何值的插值点,包括在控制点之间的非整数值,比如 2.4 或者 4.8 等 path.interpolatedPoint(at: 2.4)。这样你就可以灵活地以任何你想要的方式去插值笔画路径
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
“`Swift
for parametricValue in path.indicies {

前言

在 WWDC 2019 上,苹果推出了 PencilKit。利用 PencilKit,开发者可以创建出很多精美的绘画、笔记等 APP,PencilKit 提供了丰富的好看而又逼真的“墨水”,可以提供最好的低延迟绘画体验。PencilKit 在 iOS 14 中提供了一些新的用户界面上的改进,有关这些改进的更多信息可以参考 WWDC20 10107 – What’s new in PencilKit,本文将不再详述这些内容。
本文主要围绕 PencilKit 绘图里面的内容展开:看看它们是由什么构成的以及你可以用它们来做什么。

Data Model Access

在 iOS 14 中,提供了 PencilKit 的数据模型内部的绘图、笔画、墨迹、路径以及点,这些将使得开发者利用 PencilKit 在自己的 APP 中构建一些出色的新功能。
通过对数据模型的访问,开发者可以检查用户所绘制的内容,对所绘制的内容进行一些处理:操作现有的绘图或者从头开始动态地创建新的绘图。

  • Access to the internals of PKDrawing (探索 PKDrawing 内部构造)
  • Synthesize new drawings (合成新的图形)
  • Inspect user created drawings (检查用户创建的图形)

下面用一个练字 Demo 来演示这些内容
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
练字 Demo 的主要功能:

  • 可以用键盘输入或者是直接用 Apple Pencil 书写创建你想要练习的内容比如 (Dinos Rule)
  • 模板也可以直接从外部进行导入
  • 可以设置需要练习的字体大小和难度等
  • 生成了练习模版后,你要抄的笔画由一个小红点进行动画演示如何去临摹一个字母
  • 如果临摹的东西接近模板上的字,临摹的笔记会变成绿色,可以接着临摹下一个字母,否则当前写的笔画消失,小红点指式的动画会重新开始
  • 最后能看到临摹的分数

上方 Demo 中所列出的书写、临摹、从文本中合成绘图并将绘图动画化以及对临摹的内容进行识别等功能都是最新的 PencilKit 提供的 (你可以通过访问 PencilKit 数据模型来实现),而这仅仅是一部分。下面来看看 PencilKit 绘图里面的内容:

Inside PKDrawing

下面两幅图,左边是一副简单的花的图片,右边是将花的绘制过程拆开后的内容

WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings => WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings


可以看到这幅简单的花的图画是由很多的 PencilKit 笔画构成的,每一个笔画都代表了用户绘制的一条单独的线
这些笔画是按照用户的绘制顺序进行展开的,很明显,用户首先绘制来花的轮廓然后再绘制花茎、叶子最后再用马克笔给花进行上色

Generating Drawings

下方是一张 26 字母表,包含了刚刚 Demo 演示的小写字母
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
那么我们怎么把将这张字母表生成文本呢?

  • 首先需要把这张图分割成一个个单独的字母
  • 然后将这些字母组合起来,生成用户需要练习的模板文本
// 将这幅画分割开来,把小写字母画出来,得到它们的笔画 // 对笔画数组进行分割得到每个字母的笔画 // 最后用它为没个字母创建新的绘图,对字母表中的每个字母都进行这样的操作即可 lowercaseDrawings = lowercaseLetterStrokeRanges.map { letterRange in     let letterStrokes = lowercaseABC.strokes[letterRange]     let letterDrawing = PKDrawing(strokes: letterStrokes)     return letterDrawing }

如果想检查或者修改一个绘图,就可以通过访问绘图的笔画数组来完成,当然,你也可以使用笔画从头开始创建新的绘图

PKStroke

PKStroke(笔画)包含了这些元素:pathinkmasktransform 以及 renderBoundsWWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings

path(PKStrokePath)

笔画的路径,主要描述来画笔的形状以及该形状沿路径变化时的外观,比如:笔画路径在某个时间,给出了的笔画的宽度

ink

墨水,描述了笔画的样子,笔画的颜色以及笔画的类型。ink 包含了墨水的种类和颜色,它没有宽度,笔画的宽度是沿着笔画的路径的变化而变化的

transform

笔画的变换,描述来笔画的方向和位置之间的转换

mask

笔画的蒙板

renderBounds

笔画的渲染界限,包含了整个笔画的边界,渲染界限解释了所有笔画属性的生效范围,包括 pathinktransform 以及 mask

PencilKit 笔画路径是 PencilKit 笔画点的统一立方体 B 样条,也就是说一个路径的内容,其实就是 B 样条的控制点
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings

for point in path {     draw(point) }

依次画出迭代路径上的每一个点,实际上这样画出的点并不在笔画上:
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
图中黄色的小圆点就是 B 样条控制点,这也许并不是你想画的,这时我们就需要对样条进行差值来得到实际路径上的点:用 interpolatedPoint strideBy 来访问这些点,这提供了一个点的序列,我们就可以像之前一样迭代,画出这些,于是就有了路径上的一系列点
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings

for point in path.interpolatedPoints(strideBy: .distance(50)) {     draw(point) }

例子中,在路径上的点的数量比较多,并且它们的艰巨是统一的,距离是 50 点,这个就是传递给方法的步幅参数
最后一个点的间距不是均匀的,这是因为无论步幅如何,笔画上的最后一个点总是生成的,你可以通过距离、时间或参数值来进行跨步操作。距离是绘图坐标中的点,时间是持续的时间 (以秒计算) 当然,这个取决于用户绘图的速度

参数值和 B 样条的参数差值有关

我们重新回到绘画的控制点,如果不绘控制点,需要使用 interpolatedPointat 得到参数值 0、1、2、3 等等的点绘制,这样可以得到于控制点等价的一些点,但是这些点其实是在路径上的。
这个很有用,如果为这些点标上数字,这样就可以理解是怎么回事了,这些数字实际上都是一个浮点值,这意味着开发者可以要求任何值的插值点,包括在控制点之间的非整数值,比如 2.4 或者 4.8 等 path.interpolatedPoint(at: 2.4)。这样你就可以灵活地以任何你想要的方式去插值笔画路径
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
“`Swift
for parametricValue in path.indicies {

前言

在 WWDC 2019 上,苹果推出了 PencilKit。利用 PencilKit,开发者可以创建出很多精美的绘画、笔记等 APP,PencilKit 提供了丰富的好看而又逼真的“墨水”,可以提供最好的低延迟绘画体验。PencilKit 在 iOS 14 中提供了一些新的用户界面上的改进,有关这些改进的更多信息可以参考 WWDC20 10107 – What’s new in PencilKit,本文将不再详述这些内容。
本文主要围绕 PencilKit 绘图里面的内容展开:看看它们是由什么构成的以及你可以用它们来做什么。

Data Model Access

在 iOS 14 中,提供了 PencilKit 的数据模型内部的绘图、笔画、墨迹、路径以及点,这些将使得开发者利用 PencilKit 在自己的 APP 中构建一些出色的新功能。
通过对数据模型的访问,开发者可以检查用户所绘制的内容,对所绘制的内容进行一些处理:操作现有的绘图或者从头开始动态地创建新的绘图。

  • Access to the internals of PKDrawing (探索 PKDrawing 内部构造)
  • Synthesize new drawings (合成新的图形)
  • Inspect user created drawings (检查用户创建的图形)

下面用一个练字 Demo 来演示这些内容
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
练字 Demo 的主要功能:

  • 可以用键盘输入或者是直接用 Apple Pencil 书写创建你想要练习的内容比如 (Dinos Rule)
  • 模板也可以直接从外部进行导入
  • 可以设置需要练习的字体大小和难度等
  • 生成了练习模版后,你要抄的笔画由一个小红点进行动画演示如何去临摹一个字母
  • 如果临摹的东西接近模板上的字,临摹的笔记会变成绿色,可以接着临摹下一个字母,否则当前写的笔画消失,小红点指式的动画会重新开始
  • 最后能看到临摹的分数

上方 Demo 中所列出的书写、临摹、从文本中合成绘图并将绘图动画化以及对临摹的内容进行识别等功能都是最新的 PencilKit 提供的 (你可以通过访问 PencilKit 数据模型来实现),而这仅仅是一部分。下面来看看 PencilKit 绘图里面的内容:

Inside PKDrawing

下面两幅图,左边是一副简单的花的图片,右边是将花的绘制过程拆开后的内容

WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings => WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings


可以看到这幅简单的花的图画是由很多的 PencilKit 笔画构成的,每一个笔画都代表了用户绘制的一条单独的线
这些笔画是按照用户的绘制顺序进行展开的,很明显,用户首先绘制来花的轮廓然后再绘制花茎、叶子最后再用马克笔给花进行上色

Generating Drawings

下方是一张 26 字母表,包含了刚刚 Demo 演示的小写字母
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
那么我们怎么把将这张字母表生成文本呢?

  • 首先需要把这张图分割成一个个单独的字母
  • 然后将这些字母组合起来,生成用户需要练习的模板文本
// 将这幅画分割开来,把小写字母画出来,得到它们的笔画 // 对笔画数组进行分割得到每个字母的笔画 // 最后用它为没个字母创建新的绘图,对字母表中的每个字母都进行这样的操作即可 lowercaseDrawings = lowercaseLetterStrokeRanges.map { letterRange in     let letterStrokes = lowercaseABC.strokes[letterRange]     let letterDrawing = PKDrawing(strokes: letterStrokes)     return letterDrawing }

如果想检查或者修改一个绘图,就可以通过访问绘图的笔画数组来完成,当然,你也可以使用笔画从头开始创建新的绘图

PKStroke

PKStroke(笔画)包含了这些元素:pathinkmasktransform 以及 renderBoundsWWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings

path(PKStrokePath)

笔画的路径,主要描述来画笔的形状以及该形状沿路径变化时的外观,比如:笔画路径在某个时间,给出了的笔画的宽度

ink

墨水,描述了笔画的样子,笔画的颜色以及笔画的类型。ink 包含了墨水的种类和颜色,它没有宽度,笔画的宽度是沿着笔画的路径的变化而变化的

transform

笔画的变换,描述来笔画的方向和位置之间的转换

mask

笔画的蒙板

renderBounds

笔画的渲染界限,包含了整个笔画的边界,渲染界限解释了所有笔画属性的生效范围,包括 pathinktransform 以及 mask

PencilKit 笔画路径是 PencilKit 笔画点的统一立方体 B 样条,也就是说一个路径的内容,其实就是 B 样条的控制点
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings

for point in path {     draw(point) }

依次画出迭代路径上的每一个点,实际上这样画出的点并不在笔画上:
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
图中黄色的小圆点就是 B 样条控制点,这也许并不是你想画的,这时我们就需要对样条进行差值来得到实际路径上的点:用 interpolatedPoint strideBy 来访问这些点,这提供了一个点的序列,我们就可以像之前一样迭代,画出这些,于是就有了路径上的一系列点
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings

for point in path.interpolatedPoints(strideBy: .distance(50)) {     draw(point) }

例子中,在路径上的点的数量比较多,并且它们的艰巨是统一的,距离是 50 点,这个就是传递给方法的步幅参数
最后一个点的间距不是均匀的,这是因为无论步幅如何,笔画上的最后一个点总是生成的,你可以通过距离、时间或参数值来进行跨步操作。距离是绘图坐标中的点,时间是持续的时间 (以秒计算) 当然,这个取决于用户绘图的速度

参数值和 B 样条的参数差值有关

我们重新回到绘画的控制点,如果不绘控制点,需要使用 interpolatedPointat 得到参数值 0、1、2、3 等等的点绘制,这样可以得到于控制点等价的一些点,但是这些点其实是在路径上的。
这个很有用,如果为这些点标上数字,这样就可以理解是怎么回事了,这些数字实际上都是一个浮点值,这意味着开发者可以要求任何值的插值点,包括在控制点之间的非整数值,比如 2.4 或者 4.8 等 path.interpolatedPoint(at: 2.4)。这样你就可以灵活地以任何你想要的方式去插值笔画路径
WWDC20 10148 - Inspect, Modify, and Construct PencilKit Drawings
“`Swift
for parametricValue in path.indicies {

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » WWDC20 10148 – Inspect, Modify, and Construct PencilKit Drawings求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们