⚠️ 要与其他 Swift 5.0 一起使用,请确保您使用的是 >= 0.8.0 ⚠️
⚠️ 要与其他 Swift 4.2 一起使用,请确保您使用的是 >= 0.7.1 ⚠️
⚠️ 要与其他 Swift 4.x 一起使用,请确保您使用的是 >= 0.6.1 ⚠️
⚠️ 要与其他 Swift 3.x 一起使用,请确保您使用的是 >= 0.5.0 ⚠️
⚠️ 要与其他 Swift 2.3 一起使用,请确保您使用的是 == 0.4.1 ⚠️
目的
这仅是我为个人 iPhone 应用程序开始的项目。虽然它不能像您希望的那样进行自定义, но вы можете легко使用 Smooth Freehand Drawing View。我为使用 Canvas
制作了 Palette
和 ToolBar
,因此 您不需要使用 Palette
和 ToolBar
。
NXDrawKit 是一个类集合,旨在使得使用绘制视图变得简单。此框架包括 3 种类型的视图。
Canvas
提供重做、撤销、清除、保存和加载图片,这是一个绘制视图。Palette
在用户点击按钮时调用代理,处理颜色、Alpha 和宽度。ToolBar
表示Canvas
的功能,并且可以显示Canvas
的状态。
屏幕截图
安装
Accio/SwiftPM
您可以使用 Accio 或 Swift Package Manager,通过将其添加到您的 Package.swift
文件来安装 NXDrawKit
。
.package(url: "https://github.com/Nicejinux/NXDrawKit", .branch("master"));
CocoaPods
您可以使用 CocoaPods 通过将其添加到您的 Podfile
文件来安装 NXDrawKit
。
platform :ios, '8.0'
use_frameworks!
pod 'NXDrawKit'
要获得全部功能,请在引用 UIKit 的任何地方导入 NXDrawKit
。
import UIKit
import NXDrawKit
Carthage
创建一个包含框架的 Cartfile
文件并运行 carthage bootstrap
命令。按照 说明 将 $(SRCROOT)/Carthage/Build/iOS/NXDrawKit.framework
添加到 iOS 项目中。
github "nicejinux/NXDrawKit"
手动
- 下载并将
/NXDrawKit
文件夹拖到您的项目中。 - 恭喜!
组件
画布
- 委托
当用户绘制或保存图像时,Canvas
将调用委托。
- 委托提供用户绘制图像、背景图像和合并图像。
- 用户应提供
Brush
到Canvas
以进行绘制。
// optional
func canvas(canvas: Canvas, didUpdateDrawing drawing: Drawing, mergedImage image: UIImage?)
func canvas(canvas: Canvas, didSaveDrawing drawing: Drawing, mergedImage image: UIImage?)
// required
func brush() -> Brush?
- 模型
public class Drawing: NSObject {
public var stroke: UIImage?
public var background: UIImage?
public init(stroke: UIImage? = nil, background: UIImage? = nil) {
self.stroke = stroke
self.background = background
}
}
public class Brush: NSObject {
public var color: UIColor = UIColor.blackColor()
public var width: CGFloat = 5.0
public var alpha: CGFloat = 1.0
}
- 公共方法
- 用户可以设置背景图像。
- 用户可以撤销、重做或清除
Canvas
。(最大历史大小为 50) - 用户可以将当前绘制的线条和背景内部保存,然后
Canvas
调用 didSaveDrawing: 委托
func update(backgroundImage: UIImage?)
func undo()
func redo()
func clear()
func save()
调色板
调色板
有 12 个颜色按钮、3 个 alpha 按钮和 4 个画笔宽度按钮。- 您可以使用 委托来自定义颜色、alpha 值和画笔宽度,
- 您不能 自定义按钮数量。
- 委托
- 当用户点击颜色、alpha 或宽度按钮时,
调色板
将调用委托。 - 您可以使用委托来自定义颜色、alpha 或宽度。(所有委托都是可选的)
func didChangeBrushColor(color: UIColor)
func didChangeBrushAlpha(alpha: CGFloat)
func didChangeBrushWidth(width: CGFloat)
- 标签 可以是 1 ... 12
- 如果您返回 nil,则标签的颜色将设置为 NXDrawKit 提供的默认颜色。
- 如果您返回 clearColor,则标签的颜色将被橡皮擦。
func colorWithTag(tag: NSInteger) -> UIColor?
- 标签 可以是 1 ... 3
- 如果您返回-1,则标签的透明度将由NXDrawKit提供的默认透明度设置。
func alphaWithTag(tag: NSInteger) -> CGFloat
- tag的值可为1 ... 4。
- 如果您返回-1,则标签的宽度将由NXDrawKit提供的默认宽度设置。
func widthWithTag(tag: NSInteger) -> CGFloat
- 公共方法
func currentBrush() -> Brush
工具栏
- 公共属性
- 所有按钮都使用默认值,无需
#selector 。 - 如果您要在
工具栏
上使用按钮,必须为每个按钮添加#selector 。
var undoButton: UIButton?
var redoButton: UIButton?
var saveButton: UIButton?
var loadButton: UIButton?
var clearButton: UIButton?
UIImage 扩展
- 此扩展允许您直接从您所绘图像中获取
PNG 或JPEG 格式的图像以便分享或保存。 - 所有方法均可返回nil,因此您在使用前应检查它是否为nil。
public extension UIImage {
@objc public func asPNGData() -> Data? {
return self.pngData()
}
@objc public func asJPEGData(_ quality: CGFloat) -> Data? {
return self.jpegData(compressionQuality: quality);
}
@objc public func asPNGImage() -> UIImage? {
if let data = self.asPNGData() {
return UIImage(data: data)
}
return nil
}
@objc public func asJPGImage(_ quality: CGFloat) -> UIImage? {
if let data = self.asJPEGData(quality) {
return UIImage(data: data)
}
return nil
}
}
版本历史
- 0.8.1
- 修复:SPM问题
- 0.8.0
- 更新:支持Xcode10,Swift 5.0
- 0.7.1
- 更新:支持Xcode10,Swift 4.2
- 0.6.1
- 更新:支持Xcode9,Swift 4.0
- 0.5.1
- 更新:支持Xcode8,Swift 3.0
- 0.4.1
- 更新:支持Xcode8,Swift 2.3
- 0.3.4
- 修复:移除背景图像问题
- 0.3.0
- 新增:添加橡皮擦功能
- 0.2.0
- 修改:数据模型将
Paper
重命名为Drawing
- 修改:数据模型将
- 0.1.0
- 发布
即将改进
- Swift风格代码
- 没有橡皮擦,用户无法擦除笔画。 - 添加于v0.2.0
- 设置背景图片后,用户无法移除。
-
调色板
和工具栏
无法方便地进行自定义。
作者
这是Jinwook Jeon。我在韩国从事iOS开发工作。这是我的第一个Swift项目,因此在这个框架中可能会有很多奇怪的东西。我期待您的评论、建议、修复等,您想说的任何内容。请随时联系我。
- 电子邮件:[email protected]
- Facebook:http://facebook.com/Nicejinux
- 主页:http://Nicejinux.NET
MIT许可证
Copyright (c) 2016 Jinwook Jeon. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.