SwiftyDraw is a simple, light-weight drawing framework written in Swift. SwiftyDraw is built using Core Gaphics and is very easy to implement.
- iOS 9.1+
- Swift 4.2
SwiftyDraw is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'SwiftyDraw'
Simply copy the contents of the Source folder into your project.
Using SwiftyDraw is very simple:
Simply create a SwiftyDrawView and add it to your View Controller:
let drawView = SwiftyDrawView(frame: self.view.frame)
self.view.addSubview(drawView)
By default, the view will automatically respond to touch gestures and begin drawing. The default color is black.
To disable drawing, simply set the isEnabled
property to false:
drawView.isEnabled = false
For drawing, we use Brush
to keep track of styles like width
, color
, etc.. We have multiple different default brushes, you can use as follows:
drawView.brush = Brush.default
The default brushed are:
public static var `default`: Brush { get } // black, width 3
public static var thin : Brush { get } // black, width 2
public static var medium : Brush { get } // black, width 7
public static var thick : Brush { get } // black, width 10
public static var marker : Brush { get } // flat red-ish, width 12
public static var eraser : Brush { get } // white, width 8; currently this fakes an eraser by using the canvas' background color to draw
SwiftyDrawView
supports drawing-angle-adjusted brushes. Effectively, that means, if the user (using an Pencil) draws with the tip of the pencil, the brush will reduce its width a little. If the user draws at a very low angle, with the side of the pencil, the brush will be a little thicker.
You can modify this behavior by setting adjustedWidthFactor
of a brush. If you increase the number (to, say, 5
) the changes will increase. If you reduce the number to 0
, the width will not be adjusted at all.
The default value is 1
which causes a slight increase in width.
This is an opt-in feature. That means, in shouldBeginDrawingIn
, you need to manually put drawingView.brush.adjustWidth(for: touch)
, to make it work.
That is, because you might not want to use it if you have implemented a zoom feature and want to disable it while the user is zooming to get better results.
For more customization, you can modify the different properties of a brush to fit your needs.
The color of a line stroke can be changed by adjusting the color
property of a brush. SwiftyDraw accepts any UIColor:
drawView.brush.color = .red
or
drawView.brush.color = UIColor(colorLiteralRed: 0.75, green: 0.50, blue: 0.88, alpha: 1.0)
The width of a line stroke can be changed by adjusting the width
property of a brush. SwiftyDraw accepts any positive CGFloat:
drawView.brush.width = CGFloat(5.0)
The opacity of a line stroke can be changed by adjusting the lineOpacity
property. SwiftyDraw accepts a CGFloat between 0. and 1.0:
drawView.brush.opacity = CGFloat(0.5)
If you wish to clear the entire canvas, simply call the clear
function:
drawView.clear()
drawView.undo()
...and redo:
drawView.redo()
SwiftyDraw has delegate functions to notify you when a user is interacting with a SwiftDrawView. To access these delegate methods, simply make your View Controller conform to the SwiftyDrawViewDelegate
protocol:
class ViewController: UIViewController, SwiftyDrawViewDelegate
/// SwiftyDrawViewDelegate called when a touch gesture should begin on the SwiftyDrawView using given touch type
func swiftyDraw(shouldBeginDrawingIn drawingView: SwiftyDrawView, using touch: UITouch) -> Bool
/// SwiftyDrawViewDelegate called when a touch gesture begins on the SwiftyDrawView.
func swiftyDraw(didBeginDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)
/// SwiftyDrawViewDelegate called when touch gestures continue on the SwiftyDrawView.
func swiftyDraw(isDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)
/// SwiftyDrawViewDelegate called when touches gestures finish on the SwiftyDrawView.
func swiftyDraw(didFinishDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)
/// SwiftyDrawViewDelegate called when there is an issue registering touch gestures on the SwiftyDrawView.
func swiftyDraw(didCancelDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)
This is a project built by Awalz and maintained & improved by LinusGeffarth.
If you would like to propose any enhancements, bug fixes, etc., feel free to create a pull request or an issue respectively.
If you have any questions, or just want to say hi, you can reach out to me via Twitter, or email.
SwiftyDraw is available under the MIT license. See the LICENSE file for more info.