Giter Club home page Giter Club logo

swiftydraw's Introduction

SwiftyDraw

Platform: iOS 9.1+ Language: Swift 4 CocoaPods License: MIT

Overview

SwiftyDraw is a simple, light-weight drawing framework written in Swift. SwiftyDraw is built using Core Gaphics and is very easy to implement.

Requirements

  • iOS 9.1+
  • Swift 5.0

Installation

Cocoapods:

SwiftyDraw is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'SwiftyDraw'

Carthage

SwiftyDraw is also available through Carthage. To install, you can simply add the following line to your Cartfile for the latest version of SwiftyDraw.

github "awalz/SwiftyDraw" "master"

Manual Installation:

Simply copy the contents of the Source folder into your project.

Usage

Using SwiftyDraw is very simple:

Getting Started:

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

Brushes

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

Adjusted Width Factor

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.

Further Customization:

For more customization, you can modify the different properties of a brush to fit your needs.

Line Color:

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)

Line Width:

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)

Line Opacity:

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)

Editing

Clear All:

If you wish to clear the entire canvas, simply call the clear function:

drawView.clear()

Drawing History:

drawView.undo()

...and redo:

drawView.redo()

Apple Pencil Integration

Apple Pencil can be used for drawing in a SwiftyDrawView, just like a finger.
Special features, however, regarding Apple Pencil 2 are only supported on iOS 12.1 and above versions.

Apple Pencil 2 Double Tap action

Enable/ Disable pencil interaction

Apple Pencil interaction is enabled by default, but you can set drawView.isPencilInteractive to change that setting.

Pencil Events

When double tapping the pencil, SwiftyDraw will check the user preferences set in the system. If the preference is set to switch to eraser, SwiftyDraw will switch between normal and erasing mode; if set to last used tool, SwiftyDraw will switch between current and previous brush.

Delegate

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

There are five delegate methods

/// 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)

Contribution

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.

Contact

If you have any questions, or just want to say hi, you can reach out to me via Twitter, or email.

LICENSE

SwiftyDraw is available under the MIT license. See the LICENSE file for more info.

swiftydraw's People

Contributors

linusgeffarth avatar awalz avatar dylanshine avatar msztech avatar rivera-ernesto avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.