Visualization reaction to devices activating

This commit is contained in:
Charles Magahern
2015-12-31 17:30:23 -08:00
parent 303c620372
commit 4df09f18c5
6 changed files with 93 additions and 14 deletions
@@ -8,7 +8,7 @@
import UIKit import UIKit
class MainViewController: UIViewController { class MainViewController: UIViewController, SwitchesViewControllerDelegate {
private var _visualizationController: VisualizationViewController = VisualizationViewController() private var _visualizationController: VisualizationViewController = VisualizationViewController()
private var _switchesController: SwitchesViewController = SwitchesViewController() private var _switchesController: SwitchesViewController = SwitchesViewController()
private var _headerView: HeaderView = HeaderView() private var _headerView: HeaderView = HeaderView()
@@ -24,10 +24,18 @@ class MainViewController: UIViewController {
self.addChildViewController(_visualizationController) self.addChildViewController(_visualizationController)
self.view.addSubview(_visualizationController.view) self.view.addSubview(_visualizationController.view)
_switchesController.delegate = self
self.addChildViewController(_switchesController) self.addChildViewController(_switchesController)
self.view.addSubview(_switchesController.view) self.view.addSubview(_switchesController.view)
self.view.addSubview(_headerView) self.view.addSubview(_headerView)
// DEBUG
for _ in 0 ..< 10 {
let device = WemoDevice()
device.name = "beatmania IIDX"
self.devices.append(device)
}
} }
override func viewDidLayoutSubviews() override func viewDidLayoutSubviews()
@@ -81,4 +89,37 @@ class MainViewController: UIViewController {
{ {
return true return true
} }
// MARK: API
var devices: [WemoDevice] = []
{
didSet
{
_switchesController.devices = devices
_updateVisualization(false)
}
}
// MARK: SwitchesViewControllerDelegate
func switchesViewControllerDidToggleDevice(controller: SwitchesViewController, device: WemoDevice)
{
_updateVisualization(true)
}
// MARK: Internal
internal func _updateVisualization(animated: Bool)
{
var activatedDevicesCount = 0
for device in self.devices {
if (device.state == .On) {
++activatedDevicesCount
}
}
let percentageActivated = Float(activatedDevicesCount) / Float(self.devices.count)
_visualizationController.setPercentActivated(percentageActivated, animated: animated)
}
} }
@@ -10,12 +10,23 @@ import Darwin
import Foundation import Foundation
import UIKit import UIKit
protocol SwitchesViewControllerDelegate: class {
func switchesViewControllerDidToggleDevice(controller: SwitchesViewController, device: WemoDevice)
}
extension SwitchesViewControllerDelegate {
func switchesViewControllerDidToggleDevice(controller: SwitchesViewController, device: WemoDevice) {}
}
class SwitchesViewController: UIViewController, class SwitchesViewController: UIViewController,
UICollectionViewDataSource, UICollectionViewDataSource,
UICollectionViewDelegateFlowLayout UICollectionViewDelegateFlowLayout
{ {
private var _collectionView: UICollectionView = UICollectionView(frame: CGRectZero, weak var delegate: SwitchesViewControllerDelegate?
collectionViewLayout: UICollectionViewFlowLayout())
private var _collectionView: UICollectionView = UICollectionView(frame: CGRectZero,
collectionViewLayout: UICollectionViewFlowLayout())
private var _currentDevicesHash: UInt = 0
static private let collectionViewCellReuseIdentifier = "SwitchesCollectionViewReuseID" static private let collectionViewCellReuseIdentifier = "SwitchesCollectionViewReuseID"
static private let collectionViewCellsSpacing: CGFloat = 5.0 static private let collectionViewCellsSpacing: CGFloat = 5.0
@@ -46,11 +57,29 @@ class SwitchesViewController: UIViewController,
_collectionView.frame = bounds _collectionView.frame = bounds
} }
// MARK: API
var devices: [WemoDevice] = []
{
didSet
{
var devicesHash: UInt = 0
for device in devices {
devicesHash += UInt(device.serial.hash)
}
if (_currentDevicesHash != devicesHash) {
_collectionView.reloadData()
_currentDevicesHash = devicesHash
}
}
}
// MARK: UICollectionView // MARK: UICollectionView
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{ {
return 10 return self.devices.count
} }
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
@@ -58,10 +87,8 @@ class SwitchesViewController: UIViewController,
let reuseID = SwitchesViewController.collectionViewCellReuseIdentifier let reuseID = SwitchesViewController.collectionViewCellReuseIdentifier
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseID, forIndexPath: indexPath) as! WemoDeviceCellView let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseID, forIndexPath: indexPath) as! WemoDeviceCellView
var device = WemoDevice() let device = self.devices[indexPath.row]
device.name = "beatmania IIDX"
cell.device = device cell.device = device
cell.ordinal = indexPath.row + 1 cell.ordinal = indexPath.row + 1
return cell return cell
@@ -81,5 +108,10 @@ class SwitchesViewController: UIViewController,
{ {
let cell = collectionView.cellForItemAtIndexPath(indexPath) as! WemoDeviceCellView let cell = collectionView.cellForItemAtIndexPath(indexPath) as! WemoDeviceCellView
cell.toggled = !cell.toggled cell.toggled = !cell.toggled
let device = self.devices[indexPath.row]
device.state = (cell.toggled ? .On : .Off)
self.delegate?.switchesViewControllerDidToggleDevice(self, device: device)
} }
} }
+1 -1
View File
@@ -8,7 +8,7 @@
import Foundation import Foundation
struct WemoDevice { class WemoDevice {
enum State { enum State {
case Off case Off
case On case On
@@ -74,7 +74,8 @@ class ConnectionStatusView: UIView {
// MARK: API // MARK: API
var connectivityStatus: Bool { var connectivityStatus: Bool
{
get get
{ {
return _connectivityStatus return _connectivityStatus
@@ -74,7 +74,8 @@ class SwitchIndicatorView: UIView {
// MARK: API // MARK: API
var status: Bool { var status: Bool
{
get get
{ {
return _status return _status
@@ -88,7 +89,8 @@ class SwitchIndicatorView: UIView {
} }
} }
var foregroundColor: UIColor { var foregroundColor: UIColor
{
get get
{ {
return _foregroundColor return _foregroundColor
@@ -99,7 +99,8 @@ class WemoDeviceCellView: UICollectionViewCell {
// MARK: API // MARK: API
var device: WemoDevice? { var device: WemoDevice?
{
get get
{ {
return _device return _device
@@ -112,7 +113,8 @@ class WemoDeviceCellView: UICollectionViewCell {
} }
} }
var ordinal: Int { var ordinal: Int
{
get get
{ {
return _ordinal return _ordinal
@@ -125,7 +127,8 @@ class WemoDeviceCellView: UICollectionViewCell {
} }
} }
var toggled: Bool { var toggled: Bool
{
get get
{ {
return (_device?.state == .On) return (_device?.state == .On)