Advertisement
thieumao

ScheduleTime

Nov 8th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 4.80 KB | None | 0 0
  1. //
  2. //  ViewController.swift
  3. //  Schedule
  4. //
  5. //  Created by nguyen.van.hung on 11/8/16.
  6. //  Copyright © 2016 nguyen.van.hung. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10.  
  11. class ViewController: UIViewController {
  12.    
  13.     struct ScheduleTime {
  14.         var startTime: CGFloat = 0
  15.         var endTime: CGFloat = 0
  16.     }
  17.    
  18.     struct ScheduleKey: Hashable {
  19.         var startRange: CGFloat = 0
  20.         var endRange: CGFloat = 0
  21.        
  22.         var hashValue: Int {
  23.             return startRange.hashValue ^ endRange.hashValue
  24.         }
  25.        
  26.         static func ==(k1: ScheduleKey, k2: ScheduleKey) -> Bool {
  27.             return k1.startRange == k2.startRange && k1.endRange == k2.endRange
  28.         }
  29.     }
  30.  
  31.  
  32.     @IBOutlet weak var scheduleScrollView: UIScrollView!
  33.    
  34.     override func viewDidLoad() {
  35.         super.viewDidLoad()
  36.         // Do any additional setup after loading the view, typically from a nib.
  37.         // init schedule list
  38.         var schedules = [
  39.             ScheduleTime(startTime: 0, endTime: 21),
  40.             ScheduleTime(startTime: 10, endTime: 11),
  41.             ScheduleTime(startTime: 13, endTime: 14),
  42.             ScheduleTime(startTime: 13.5, endTime: 14.5),
  43.             ScheduleTime(startTime: 13.5, endTime: 16.5),
  44.             ScheduleTime(startTime: 13.5, endTime: 15.5),
  45.             ScheduleTime(startTime: 12.5, endTime: 15.5),
  46.             ScheduleTime(startTime: 10.5, endTime: 17.5)
  47.         ]
  48.        
  49.         schedules.sort { (schedule1, schedule2) -> Bool in
  50.             return schedule1.startTime < schedule2.startTime
  51.         }
  52.        
  53.         var scheduleGroup = [ScheduleKey: [ScheduleTime]]()
  54.        
  55.         for schedule in schedules {
  56.             var foundKey: ScheduleKey?
  57.             for key in scheduleGroup.keys {
  58.                 if schedule.startTime >= key.startRange && schedule.startTime < key.endRange {
  59.                     // insert into group
  60.                     foundKey = key
  61.                     break
  62.                 }
  63.             }
  64.            
  65.             if let k = foundKey {
  66.                 let key = ScheduleKey(startRange: k.startRange, endRange: max(schedule.endTime, k.endRange))
  67.                 var arr = scheduleGroup[k]
  68.                 scheduleGroup.removeValue(forKey: k)
  69.                 arr?.append(schedule)
  70.                 scheduleGroup[key] = arr
  71.             } else {
  72.                 let key = ScheduleKey(startRange: schedule.startTime, endRange: schedule.endTime)
  73.                 var arr = [ScheduleTime]()
  74.                 arr.append(schedule)
  75.                 scheduleGroup[key] = arr
  76.             }
  77.         }
  78.        
  79.         let contentView = createScheduleBoardView()
  80.         scheduleScrollView.addSubview(contentView)
  81.        
  82.         let paddingLeft: CGFloat = 80
  83.         let width = contentView.frame.size.width - paddingLeft
  84.         let height: CGFloat = 100
  85.        
  86.         for key in scheduleGroup.keys {
  87.             if let arr = scheduleGroup[key] {
  88.                 let w = width / CGFloat(arr.count)
  89.                 for i in 0..<arr.count {
  90.                     let schedule = arr[i]
  91.                     let v = UIView(frame: CGRect(x: paddingLeft + CGFloat(i) * w, y: schedule.startTime * height, width: w, height: height * (schedule.endTime - schedule.startTime)))
  92.                     v.backgroundColor = getRandomColor()
  93.                     contentView.addSubview(v)
  94.                 }
  95.             }
  96.         }
  97.        
  98.         scheduleScrollView.contentSize = CGSize(width: width, height: CGFloat(24) * height)
  99.         scheduleScrollView.contentOffset = CGPoint(x: 0, y: 9.0 * height)
  100.     }
  101.    
  102.     func getRandomColor() -> UIColor{
  103.         let randomRed:CGFloat = CGFloat(drand48())
  104.         let randomGreen:CGFloat = CGFloat(drand48())
  105.         let randomBlue:CGFloat = CGFloat(drand48())
  106.         return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, alpha: 1.0)
  107.        
  108.     }
  109.  
  110.     override func didReceiveMemoryWarning() {
  111.         super.didReceiveMemoryWarning()
  112.         // Dispose of any resources that can be recreated.
  113.     }
  114.  
  115.     func createScheduleBoardView() -> UIView {
  116.         let boardView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
  117.         for i in 0...24 {
  118.             let line = UIView(frame: CGRect(x: 0.0, y: CGFloat(i) * 100.0, width: UIScreen.main.bounds.size.width, height: 0.5))
  119.             line.backgroundColor = #colorLiteral(red: 0.501960814, green: 0.501960814, blue: 0.501960814, alpha: 1)
  120.             boardView.addSubview(line)
  121.             let label = UILabel(frame: CGRect(x: 0.0, y: CGFloat(i) * 100.0 - 30.0, width: UIScreen.main.bounds.size.width, height: 30))
  122.             label.text = String(i)
  123.             boardView.addSubview(label)
  124.         }
  125.         return boardView
  126.     }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement