ISTimeline is a simple timeline view written in Swift 2.2
We recommend to use CocoaPods :
pod 'ISTimeline', '~> 0.0.3'
Or just drop the files ISPoint.swift and ISTimeline.swift into your project.
import ISTimeline
We recommend to use the timeline view in your storyboard. Just add a plain view and set the custom class and the module property to ISTimeline
.
Or add the view programmatically:
let frame = CGRectMake(0, 20, 300, 400) let timeline = ISTimeline(frame: frame) timeline.backgroundColor = .whiteColor() self.view.addSubview(timeline)
Each bubble is represented by an ISPoint object in the points array. ISPoints has several properties:
var title:String
shown in the bubble
var description:String?
shown below the bubble
var pointColor:UIColor
the color of each point in the line
var lineColor:UIColor
the color of the line after a point
var touchUpInside:Optional<(point:ISPoint) -> Void>
a callback, which is triggered after a touch inside a bubble
var fill:Bool
fills the point in the line (default: false
)
Example point:
let point = ISPoint(title: "my title") point.description = "my awesome description" point.lineColor = .redColor() point.fill = true
The designated initializer is:
ISPoint(title:String, description:String, pointColor:UIColor, lineColor:UIColor, touchUpInside:Optional<(point:ISPoint) -> Void>, fill:Bool)
You also can use one the convenience initializers:
ISPoint(title:String, description:String, touchUpInside:Optional<(point:ISPoint) -> Void>)
ISPoint(title:String, touchUpInside:Optional<(point:ISPoint) -> Void>)
Or even this one:
ISPoint(title:String)
To get touch events you just have to set a callback closure to the property point.touchUpInside
. It is triggered after a touch up inside a bubble.
point.touchUpInside = { (point:ISPoint) in // do something }
To add points to the timeline you can simple create and set your points array to the property timeline.points
or you can append each point one after the other.
let myPoints = [ ISPoint(title: "first"), ISPoint(title: "second"), ISPoint(title: "third") ] timeline.points = myPoints
Append points:
timeline.points.append(ISPoint(title: "fourth"))
You can customize the following timeline colors:
var bubbleColor:UIColor
color of every bubble (default .init(red: 0.75, green: 0.75, blue: 0.75, alpha: 1.0)
)
var titleColor:UIColor
color of the title in the bubble (default .whiteColor()
)
var descriptionColor:UIColor
color the description text (default .grayColor()
)
Points can be colored as described above.
Some common parameters can be adjusted:
var pointDiameter:CGFloat
diameter of a point in the line (default 6.0
)
var lineWidth:CGFloat
the thickness of the line (default 2.0
)
var bubbleRadius:CGFloat
the radius of the bubble corners (default 2.0
)
With the flag var bubbleArrows:Bool
it is possible to remove all arrows (default true
).
With arrows:
And without arrows:
You can add some padding by setting the content insets. This currently can only be done programmatically.
timeline.contentInset = UIEdgeInsetsMake(20.0, 20.0, 20.0, 20.0)
Per default, the timeline clips all subviews to its bounds. If you would like to change this behavior just set it to false
.
timeline.clipsToBounds = false
let timeline = ISTimeline(frame: frame) timeline.backgroundColor = .whiteColor() timeline.bubbleColor = .init(red: 0.95, green: 0.95, blue: 0.95, alpha: 1.0) timeline.titleColor = .blackColor() timeline.descriptionColor = .darkTextColor() timeline.pointDiameter = 7.0 timeline.lineWidth = 2.0 timeline.bubbleRadius = 0.0 self.view.addSubview(timeline) for i in 0...9 { let point = ISPoint(title: "point /(i)") point.description = "my awesome description" point.lineColor = i % 2 == 0 ? .redColor() : .greenColor() point.pointColor = point.lineColor point.touchUpInside = { (point:ISPoint) in print(point.title) } timeline.points.append(point) }
ISTimeline is licensed under the terms of the Apache License 2.0. See the LICENSE file for more info.
Feel free to fork the project and send us a pull-request!