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
SwiftyDraw is available under the BSD license. See the LICENSE file for more info.
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 = falseFor 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.defaultThe 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 drawSwiftyDrawView 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 = .redor
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.