Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // ViewController.swift
- // Schedule
- //
- // Created by nguyen.van.hung on 11/8/16.
- // Copyright © 2016 nguyen.van.hung. All rights reserved.
- //
- import UIKit
- class ViewController: UIViewController {
- struct ScheduleTime {
- var startTime: CGFloat = 0
- var endTime: CGFloat = 0
- }
- struct ScheduleKey: Hashable {
- var startRange: CGFloat = 0
- var endRange: CGFloat = 0
- var hashValue: Int {
- return startRange.hashValue ^ endRange.hashValue
- }
- static func ==(k1: ScheduleKey, k2: ScheduleKey) -> Bool {
- return k1.startRange == k2.startRange && k1.endRange == k2.endRange
- }
- }
- @IBOutlet weak var scheduleScrollView: UIScrollView!
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- // init schedule list
- var schedules = [
- ScheduleTime(startTime: 0, endTime: 21),
- ScheduleTime(startTime: 10, endTime: 11),
- ScheduleTime(startTime: 13, endTime: 14),
- ScheduleTime(startTime: 13.5, endTime: 14.5),
- ScheduleTime(startTime: 13.5, endTime: 16.5),
- ScheduleTime(startTime: 13.5, endTime: 15.5),
- ScheduleTime(startTime: 12.5, endTime: 15.5),
- ScheduleTime(startTime: 10.5, endTime: 17.5)
- ]
- schedules.sort { (schedule1, schedule2) -> Bool in
- return schedule1.startTime < schedule2.startTime
- }
- var scheduleGroup = [ScheduleKey: [ScheduleTime]]()
- for schedule in schedules {
- var foundKey: ScheduleKey?
- for key in scheduleGroup.keys {
- if schedule.startTime >= key.startRange && schedule.startTime < key.endRange {
- // insert into group
- foundKey = key
- break
- }
- }
- if let k = foundKey {
- let key = ScheduleKey(startRange: k.startRange, endRange: max(schedule.endTime, k.endRange))
- var arr = scheduleGroup[k]
- scheduleGroup.removeValue(forKey: k)
- arr?.append(schedule)
- scheduleGroup[key] = arr
- } else {
- let key = ScheduleKey(startRange: schedule.startTime, endRange: schedule.endTime)
- var arr = [ScheduleTime]()
- arr.append(schedule)
- scheduleGroup[key] = arr
- }
- }
- let contentView = createScheduleBoardView()
- scheduleScrollView.addSubview(contentView)
- let paddingLeft: CGFloat = 80
- let width = contentView.frame.size.width - paddingLeft
- let height: CGFloat = 100
- for key in scheduleGroup.keys {
- if let arr = scheduleGroup[key] {
- let w = width / CGFloat(arr.count)
- for i in 0..<arr.count {
- let schedule = arr[i]
- let v = UIView(frame: CGRect(x: paddingLeft + CGFloat(i) * w, y: schedule.startTime * height, width: w, height: height * (schedule.endTime - schedule.startTime)))
- v.backgroundColor = getRandomColor()
- contentView.addSubview(v)
- }
- }
- }
- scheduleScrollView.contentSize = CGSize(width: width, height: CGFloat(24) * height)
- scheduleScrollView.contentOffset = CGPoint(x: 0, y: 9.0 * height)
- }
- func getRandomColor() -> UIColor{
- let randomRed:CGFloat = CGFloat(drand48())
- let randomGreen:CGFloat = CGFloat(drand48())
- let randomBlue:CGFloat = CGFloat(drand48())
- return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, alpha: 1.0)
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
- func createScheduleBoardView() -> UIView {
- let boardView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
- for i in 0...24 {
- let line = UIView(frame: CGRect(x: 0.0, y: CGFloat(i) * 100.0, width: UIScreen.main.bounds.size.width, height: 0.5))
- line.backgroundColor = #colorLiteral(red: 0.501960814, green: 0.501960814, blue: 0.501960814, alpha: 1)
- boardView.addSubview(line)
- let label = UILabel(frame: CGRect(x: 0.0, y: CGFloat(i) * 100.0 - 30.0, width: UIScreen.main.bounds.size.width, height: 30))
- label.text = String(i)
- boardView.addSubview(label)
- }
- return boardView
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement