马亮 2.9.2

马亮 2.9.2

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2020年12月
SPM支持SPM

Harley-xk 维护。



马亮 2.9.2

  • Harley-xk

Banner

CI Status Platform Version Carthage compatible Language codebeat badge License twitter weibo

icon 马亮 是一个基于 Metal 的绘画框架。它支持使用自定义纹理进行绘制和手写。马亮这个名字来源于中国古老神话故事中一个拥有神奇画笔的男孩。

简体中文

☕️如果我为您节省了时间,请通过以下链接捐杯咖啡给我

📱使用马亮技术的应用程序现在可在 App Store 上找到

功能

  • 贝塞尔曲线线段
  • 纹理 旋转
  • 发光 线段
  • 图表元素(用于图片和从UIView快照中获取的任何其他内容)
  • 基于力的笔画大小调整
  • 支持 铅笔
  • 支持 3D Touch
  • 撤销 & 重做
  • 缩放 & 区分
  • 导出到图片
  • 将矢量内容保存到磁盘
  • 支持macOS Catalyst

要求

iOS 9.0, Swift 5

核心绘画模块基于Metal

你可以通过仅更改几行代码,使其与较低的iOS和Swift版本兼容。

安装

CocoaPods

MaLiang 可通过 CocoaPods 获取。要安装它,只需在您的 Podfile 中添加以下行

pod 'MaLiang'

为了使用旧的 OpenGL ES 版本

pod 'MaLiang', '~> 1.1'

Carthage

使用 Carthage 将 MaLiang 集成到您的 Xcode 项目中,在您的 Cartfile 中指定它

github "Harley-xk/MaLiang"

运行 carthage update 来构建框架,并将构建的 MaLiang.framework 拖到您的 Xcode 项目中。

请确保将 MaLiang.framework 添加到目标的 嵌入的二进制文件

使用方法

MaLiang 使用简单。

  1. import MaLiang
  2. 享受绘画吧!

画布

open class Canvas: MetalView

CanvasMaLiang 的基本组件。您将在此画布上绘制所有内容。 CanvasMetalView 扩展而来,而 MetalView 又从 MTKView 扩展而来。 MetalView 处理与 MetalKit 相关的所有逻辑,并隐藏它们。

Canvas 可以用 xib 或代码轻松创建。

  • 使用 xib 或 storyboard,只需将一个 UIView 对象拖放到您的视图控制器中,并将其类更改为 Canvas,模块更改为 MaLiang
  • 使用代码,只需像之前创建任何 UIView 那样使用 init(frame:)

现在,所有必要的步骤都已完成!

快照

现在您可以在画布上截图。只需在Canvas上调用snapshot函数,您将获得一个可选的UIImage对象。

笔刷

所有工作完成后,您可以使用笔刷做更多事情!

笔刷MaLiang的核心特性,它可以存储纹理和颜色,使得您可以创作出令人惊叹的作品。

将具有图像数据或文件的笔刷注册到画布上并使用它进行绘画

let path = Bundle.main.path(forResource: "pencil", ofType: "png")!
let pencil = try? canvas.registerBrush(with: URL(fileURLWithPath: path))
pencil?.use()

笔刷拥有多个属性供您自定义

// opacity of texture, affects the darkness of stroke
// set opacity to 1 may cause heavy aliasing
open var opacity: CGFloat = 0.3

// width of stroke line in points
open var pointSize: CGFloat = 4

// this property defines the minimum distance (measureed in points) of nearest two textures
// defaults to 1, this means erery texture calculated will be rendered, dictance calculation will be skiped
open var pointStep: CGFloat = 1

// sensitive of pointsize changed from force, from 0 - 1
open var forceSensitive: CGFloat = 0

/// color of stroke
open var color: UIColor = .black

// indicate if the stroke size in visual will be scaled along with the Canvas
// defaults to false, the stroke size in visual will stay with the original value
open var scaleWithCanvas = false

有了这些属性,您可以按照自己的想象创作出独特的笔刷。

力量与3D触摸

MaLiang支持绘画力度自动调整笔触大小。默认情况下支持3D触摸,对不支持此功能的设备将设置模拟力度。

forceSensitive属性决定了力度是否影响笔触大小。它的值应在01之间。值越小,灵敏度越低。如果设置为0,则力度将不影响笔触大小。

小图表

从2.1.0版本开始支持小图表元素。小图表必须使用其纹理数据注册到画布。您可以从其pngData()方法简单地获取图像数据。

let data = UIImage(named: "chartlet").pngData()
let texture = try canvas.makeTexture(with: data)

您可以通过向画布添加时传入逆时针角度的方式来对小图表应用旋转。

canvas.renderChartlet(at: location, size: chartletSize, textureID: texture.id, rotation: angle)

文本

文本元素可以通过小图表功能渲染到画布上。MaLiang将文本布局和样式的工作留给了您。

  • 首先,将文本内容放入一个标签、文本视图或任何其他自定义视图
  • 其次,进行适当的样式设计和布局
  • 然后,从该视图中进行截图。
  • 最后,现在您应该有了文本内容的图像,使用小图表API将此图像渲染到画布上。

请参阅示例以获取更多详情。

CanvasData

CanvasData 现已默认配置。它包含 Canvas 上的所有数据,并使得 撤销重做 操作成为可能。
您可以使用 CanvasData 保存的数据实现自己的 保存逻辑

保存

🎉现在您可以保存您的画作到磁盘了。

// 1. create an instance of `DataExporter` with your canvas:
let exporter = DataExporter(canvas: canvas)
// 2. save to empty folders on disk:
exporter.save(to: localPath, progress: progressHandler, result: resultHandler)

// also you can use another synchronous method to do this work Synchronously
exporter.saveSynchronously(to: locakPath, progress: progressHandler)

然后,画布内容和一些文档信息将被保存在您提供的目录中的文件中。

MaLiang 不压缩文件夹,您可以参考示例项目实现自己的存档逻辑。

读取

使用 DataImporter 读取 MaLiang 保存到您画布中的数据

DataImporter.importData(from: localPath, to: canvas, progress: progressHandler, result: resultHandler)

此外,传递给 DataImporter 的 localPath 必须是放置内容文件所在的文件夹。如果您使用自己的存档逻辑,则先由自己解压内容。

许可证

MaLiang 受 MIT 许可证许可。有关更多信息,请参阅 LICENSE 文件。