Swift 4.0
InkKit is Swift 4.0 by default, so to use that just include InkKit in your podfile:
pod 'InkKit'
Swift 3.2
In order to use InkKit in a Swift 3.2/3.0 project, ensure you point to the 2.1.0
tag.
pod 'InkKit', '2.1.0'
Swift 2.3
In order to use InkKit in a Swift 2.3 project, ensure you point to the swift2.3
branch.
pod 'InkKit', :git => 'https://github.com/shaps80/InkKit/', :branch => 'swift2.3'
Swift 2.2
If you still require Swift 2.2, point your version as such:
pod 'InkKit', '1.3.1'
Everything you see here, was code-drawn with InkKit! In fact, other than some CGRect
instances, this is ALL the code required to draw the image you see on the right ;)
v2.0.0
Note: Since this is a Swift 3 release, I decided to also clean up the API and remove all deprecation warnings. InkKit 2.0 should be considered a new API.
- Swift 3.0 Support
- Updated API to support Swift 3.0 guidelines
- Shear Transforms
- Perspective Transforms
- Radians from Degrees function (and inverse)
- Corner Radius with Concave, Convex and Line support
- New Color value-type
v1.3.1
- OSX Support
- OSX Demo Project now included
Tablerenamed to GridTablerenamed to GridComponents- Added convenience methods for working with paths
v1.2.0
- Shadows
- Borders
- Tables
v1.1.0
- Images
- Strings
v1.0
- Fills
- Strokes
- Geometry
InkKit provides many useful convenience methods for drawing and geometry calculations. Its also cross platform working across iOS & MacOS
If the convenience methods below don't solve your needs, you can start by using the new methods added directly to CGContext
itself:
func draw(inRect:attributes:drawing:)
Which would look like this in usage:
CGContext.current?.draw(inRect: rect, drawing: { (context, rect, attributes) in
Color.redColor.setFill()
UIRectFill(rect)
})
This basically wraps getting the context, setting up its frame and save/restore calls. If you provide the additional DrawingAttributes block, it will also pre-configure your context with those options for you.
init(colCount:rowCount:bounds:)
func positionForCell(atIndex:) -> (col: Int, row: Int)
func boundsForCell(atIndex:) -> CGRect
func boundsForRange(sourceColumn:sourceRow:destinationColumn:destinationRow:) -> CGRect
func boundsForCell(col:row:) -> CGRect
func enumerateCells(enumerator:(index:col:row:bounds:) -> Void)
A Grid
is a really great way for laying out your drawing without having to think about placement, rect translations, etc...
I use them often for layout only, but sometimes its useful to be able to render them as well (like in the included demo).
// components is a bitmask [ .Outline, .Rows, .Columns ]
func stroke(components:attributes:)
Supports .Outer
, .Inner
and .Center
borders, as well as .Outer
and .Inner
shadows.
static func addBorder(type:path:attributes:)
static func addShadow(type:path:color:radius:offset:)
static func strokeLine(startPoint:endPoint:startColor:endColor:angleInDegrees:attributes:)
static func strokeLine(startPoint:endPoint:color:attributes:)
static func strokePath(path:startColor:endColor:angleInDegrees:attributes:)
static func fillPath(path:startColor:endColor:angleInDegrees:attributes:)
Many of the drawing methods use the geometry additions below, but they can also be useful for your own projects:
func divide(atDelta:fromEdge:margin:) -> (slice, remainder)
func insetBy(edgeInsets:) -> CGRect
mutating func insetInPlace(edgeInsets:)
func alignedTo(rect:horizontal:vertical:) -> CGRect
func scaledTo(rect:scaleMode:) -> CGRect
func gradientPoints(forAngleInDegrees:) -> (start, end)
func scaledTo(size:scaleMode:) -> CGSize
func reversibleRect(fromPoint:toPoint:) -> CGRect
There are also additional draw methods for images:
func drawAlignedTo(rect:horizontal:vertical:blendMode:alpha:)
func drawScaledTo(rect:scaleMode:blendMode:alpha:)
static func circle(radius:attributes:) -> Image
static func draw(width:height:scale:attributes:drawing:) -> Image
static func draw(size:scale:attributes:drawing:) -> Image
Finally, we even have some easy draw methods for strings:
func drawAlignedTo(rect:horizontal:vertical:attributes:constrainedSize:)
func sizeWithAttributes(attributes:constrainedSize:) -> CGSize
func drawAtPoint(point:attributes:)
func drawInRect(rect:withAttributes)
To try it out yourself, download the source and run the included demo project.
InkKit is supported on the following platforms:
- iOS 8.0 and greater
- OSX 10.11 and greater
InkKit is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'InkKit'
Alternatively you can simply drag the files into your iOS or OSX project.
InkKit is available under the MIT license. See the LICENSE file for more info.