instant-solutions / ISTimeline
- воскресенье, 3 июля 2016 г. в 03:12:22
Swift
Simple timeline view written in Swift 2.2
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 ISTimelineWe 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 bubblevar description:String? shown below the bubblevar pointColor:UIColor the color of each point in the linevar lineColor:UIColor the color of the line after a pointvar touchUpInside:Optional<(point:ISPoint) -> Void> a callback, which is triggered after a touch inside a bubblevar 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 = trueThe 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 = myPointsAppend 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:
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 = falselet 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!