From fe59e82fb9c354dfe0cfd7c0b8a82fb2992895c7 Mon Sep 17 00:00:00 2001 From: Michael Pangburn Date: Wed, 11 Oct 2017 10:48:38 -0700 Subject: [PATCH 1/6] Make carb entry time configurable when entered via Watch --- .../AddCarbsInterfaceController.swift | 16 ++- .../CarbDateInterfaceController.swift | 111 +++++++++++++++ WatchApp/Base.lproj/Interface.storyboard | 127 ++++++++++++++++-- 3 files changed, 240 insertions(+), 14 deletions(-) create mode 100644 WatchApp Extension/Controllers/CarbDateInterfaceController.swift diff --git a/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift b/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift index 18a0ccf1b0..5d096cfd17 100644 --- a/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift +++ b/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift @@ -12,7 +12,7 @@ import WatchConnectivity final class AddCarbsInterfaceController: WKInterfaceController, IdentifiableClass { - fileprivate var carbValue: Int = 15 { + private var carbValue: Int = 15 { didSet { guard carbValue >= 0 else { carbValue = 0 @@ -45,6 +45,8 @@ final class AddCarbsInterfaceController: WKInterfaceController, IdentifiableClas } } + var date = Date() + @IBOutlet weak var valueLabel: WKInterfaceLabel! @IBOutlet weak var absorptionButtonA: WKInterfaceButton! @@ -96,9 +98,13 @@ final class AddCarbsInterfaceController: WKInterfaceController, IdentifiableClas absorptionTime = .slow } + @IBAction func setDate() { + presentController(withName: CarbDateInterfaceController.className, context: self) + } + @IBAction func save() { if carbValue > 0 { - let entry = CarbEntryUserInfo(value: Double(carbValue), absorptionTimeType: absorptionTime, startDate: Date()) + let entry = CarbEntryUserInfo(value: Double(carbValue), absorptionTimeType: absorptionTime, startDate: date) do { try WCSession.default().sendCarbEntryMessage(entry, @@ -138,3 +144,9 @@ extension AddCarbsInterfaceController: WKCrownDelegate { accumulatedRotation = remainder } } + +extension AddCarbsInterfaceController: CarbDateInterfaceControllerDelegate { + func didConfirmDate(_ date: Date) { + self.date = date + } +} diff --git a/WatchApp Extension/Controllers/CarbDateInterfaceController.swift b/WatchApp Extension/Controllers/CarbDateInterfaceController.swift new file mode 100644 index 0000000000..09355376d7 --- /dev/null +++ b/WatchApp Extension/Controllers/CarbDateInterfaceController.swift @@ -0,0 +1,111 @@ +// +// CarbDateInterfaceController.swift +// WatchApp Extension +// +// Created by Michael Pangburn on 10/10/17. +// Copyright © 2017 LoopKit Authors. All rights reserved. +// + +import WatchKit +import Foundation + + +protocol CarbDateInterfaceControllerDelegate: class { + var date: Date { get set } + func didConfirmDate(_ date: Date) +} + +class CarbDateInterfaceController: WKInterfaceController, IdentifiableClass { + + weak var delegate: CarbDateInterfaceControllerDelegate? + + private var date = Date() { + didSet { + dateLabel.setText(dateFormatter.string(from: date)) + timeLabel.setText(timeFormatter.string(from: date)) + } + } + + private let dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateFormat = "MM/dd/yy" + return formatter + }() + + private let timeFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateFormat = "h:mm a" + return formatter + }() + + @IBOutlet var dateLabel: WKInterfaceLabel! + @IBOutlet var timeLabel: WKInterfaceLabel! + + override func awake(withContext context: Any?) { + super.awake(withContext: context) + crownSequencer.delegate = self + guard let delegate = context as? CarbDateInterfaceControllerDelegate else { + return + } + self.delegate = delegate + date = delegate.date + } + + override func willActivate() { + super.willActivate() + crownSequencer.focus() + } + + @IBAction func incrementDate() { + guard let nextDay = Calendar.current.date(byAdding: .day, value: 1, to: date) else { + return + } + date = nextDay + } + + @IBAction func decrementDate() { + guard let previousDay = Calendar.current.date(byAdding: .day, value: -1, to: date) else { + return + } + date = previousDay + } + + @IBAction func incrementTime() { + guard let fiveMinutesLater = Calendar.current.date(byAdding: .minute, value: 5, to: date) else { + return + } + date = fiveMinutesLater + } + + @IBAction func decrementTime() { + guard let fiveMinutesEarlier = Calendar.current.date(byAdding: .minute, value: -5, to: date) else { + return + } + date = fiveMinutesEarlier + } + + @IBAction func save() { + delegate?.didConfirmDate(date) + dismiss() + } + + // MARK: - Crown Sequencer + + private var accumulatedRotation: Double = 0 +} + +private let rotationsPerMinute: Double = 1/24 + +extension CarbDateInterfaceController: WKCrownDelegate { + func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) { + accumulatedRotation += rotationalDelta + + let remainder = accumulatedRotation.truncatingRemainder(dividingBy: rotationsPerMinute) + let minutes = Int((accumulatedRotation - remainder) / rotationsPerMinute) + accumulatedRotation = remainder + guard let changedDate = Calendar.current.date(byAdding: .minute, value: minutes, to: date) else { + return + } + date = changedDate + } +} diff --git a/WatchApp/Base.lproj/Interface.storyboard b/WatchApp/Base.lproj/Interface.storyboard index c37f64fa8b..e0a25e7cf6 100644 --- a/WatchApp/Base.lproj/Interface.storyboard +++ b/WatchApp/Base.lproj/Interface.storyboard @@ -1,12 +1,12 @@ - + - - + + @@ -16,7 +16,7 @@ - + @@ -55,30 +55,50 @@ - + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + From f60cc4d5b7c96caface9cf68b1cb4901c9befcd1 Mon Sep 17 00:00:00 2001 From: Michael Pangburn Date: Wed, 11 Oct 2017 15:53:38 -0700 Subject: [PATCH 2/6] Commit project.pbxproj --- Loop.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 9b385fca91..c79d3a405a 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -238,6 +238,7 @@ 4FF4D1001E18374700846527 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4D0FF1E18374700846527 /* WatchContext.swift */; }; 4FF4D1011E18375000846527 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4D0FF1E18374700846527 /* WatchContext.swift */; }; 540DED971E14C75F002B2491 /* EnliteSensorDisplayable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 540DED961E14C75F002B2491 /* EnliteSensorDisplayable.swift */; }; + 892A49A71F8E8FFD00107C9C /* CarbDateInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892A49A61F8E8FFD00107C9C /* CarbDateInterfaceController.swift */; }; C10428971D17BAD400DD539A /* NightscoutUploadKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C10428961D17BAD400DD539A /* NightscoutUploadKit.framework */; }; C10B28461EA9BA5E006EA1FC /* far_future_high_bg_forecast.json in Resources */ = {isa = PBXBuildFile; fileRef = C10B28451EA9BA5E006EA1FC /* far_future_high_bg_forecast.json */; }; C11C87DD1E21E53500BB71D3 /* GlucoseThreshold.swift in Sources */ = {isa = PBXBuildFile; fileRef = C178249D1E19B62300D9D25C /* GlucoseThreshold.swift */; }; @@ -585,6 +586,7 @@ 4FC8C8001DEB93E400A1452E /* NSUserDefaults+StatusExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSUserDefaults+StatusExtension.swift"; sourceTree = ""; }; 4FF4D0FF1E18374700846527 /* WatchContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WatchContext.swift; sourceTree = ""; }; 540DED961E14C75F002B2491 /* EnliteSensorDisplayable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnliteSensorDisplayable.swift; sourceTree = ""; }; + 892A49A61F8E8FFD00107C9C /* CarbDateInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarbDateInterfaceController.swift; sourceTree = ""; }; C10428961D17BAD400DD539A /* NightscoutUploadKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NightscoutUploadKit.framework; path = Carthage/Build/iOS/NightscoutUploadKit.framework; sourceTree = ""; }; C10B28451EA9BA5E006EA1FC /* far_future_high_bg_forecast.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = far_future_high_bg_forecast.json; sourceTree = ""; }; C12F21A61DFA79CB00748193 /* recommend_temp_basal_very_low_end_in_range.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = recommend_temp_basal_very_low_end_in_range.json; sourceTree = ""; }; @@ -677,6 +679,7 @@ children = ( 4328E01D1CFBE25F00E199AA /* AddCarbsInterfaceController.swift */, 4328E0161CFBE1DA00E199AA /* BolusInterfaceController.swift */, + 892A49A61F8E8FFD00107C9C /* CarbDateInterfaceController.swift */, 43846ADA1D91057000799272 /* ContextUpdatable.swift */, 43A943891B926B7B0051FA24 /* NotificationController.swift */, 4328E0151CFBE1DA00E199AA /* StatusInterfaceController.swift */, @@ -1641,6 +1644,7 @@ 4328E0291CFBE2C500E199AA /* NSUserDefaults.swift in Sources */, 4328E02F1CFBF81800E199AA /* WKInterfaceImage.swift in Sources */, 437272E01F09E41600A3DA02 /* WCSession+Swift4.swift in Sources */, + 892A49A71F8E8FFD00107C9C /* CarbDateInterfaceController.swift in Sources */, 4F2C15811E0495B200E160D4 /* WatchContext+WatchApp.swift in Sources */, 4328E02A1CFBE2C500E199AA /* UIColor.swift in Sources */, 4328E01B1CFBE1DA00E199AA /* BolusInterfaceController.swift in Sources */, From 21cc5d1eb71dfc5de5ca65c0412699b43d0359ad Mon Sep 17 00:00:00 2001 From: Michael Pangburn Date: Wed, 11 Oct 2017 16:09:46 -0700 Subject: [PATCH 3/6] Minor UI cleanup --- .../Controllers/AddCarbsInterfaceController.swift | 2 +- WatchApp/Base.lproj/Interface.storyboard | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift b/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift index 5d096cfd17..8ba396f898 100644 --- a/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift +++ b/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift @@ -133,7 +133,7 @@ final class AddCarbsInterfaceController: WKInterfaceController, IdentifiableClas fileprivate var accumulatedRotation: Double = 0 } -fileprivate let rotationsPerCarb: Double = 1/24 +private let rotationsPerCarb: Double = 1/24 extension AddCarbsInterfaceController: WKCrownDelegate { func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) { diff --git a/WatchApp/Base.lproj/Interface.storyboard b/WatchApp/Base.lproj/Interface.storyboard index e0a25e7cf6..20950eb456 100644 --- a/WatchApp/Base.lproj/Interface.storyboard +++ b/WatchApp/Base.lproj/Interface.storyboard @@ -1,6 +1,6 @@ - + @@ -98,7 +98,7 @@ - - + + @@ -90,11 +100,6 @@ - @@ -112,95 +117,16 @@ - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From a5cdc9a8622fd263afc4b25736abb7375426719e Mon Sep 17 00:00:00 2001 From: Michael Pangburn Date: Sun, 22 Oct 2017 22:24:41 -0700 Subject: [PATCH 5/6] Use WKTapGestureRecognizer rather than buttons in Watch carb entry screen --- Loop.xcodeproj/project.pbxproj | 8 +- .../AddCarbsInterfaceController.swift | 81 ++++++++-------- WatchApp/Base.lproj/Interface.storyboard | 94 +++++++++---------- 3 files changed, 90 insertions(+), 93 deletions(-) diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 586448e23d..1f6e6890e4 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -238,7 +238,7 @@ 4FF4D1001E18374700846527 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4D0FF1E18374700846527 /* WatchContext.swift */; }; 4FF4D1011E18375000846527 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4D0FF1E18374700846527 /* WatchContext.swift */; }; 540DED971E14C75F002B2491 /* EnliteSensorDisplayable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 540DED961E14C75F002B2491 /* EnliteSensorDisplayable.swift */; }; - 898E8E3E1F957A6A003EBE24 /* WKInterfaceButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 898E8E3D1F957A6A003EBE24 /* WKInterfaceButton.swift */; }; + 899461B61F9DAC4800F7C49B /* WKInterfaceButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 899461B51F9DAC4700F7C49B /* WKInterfaceButton.swift */; }; C10428971D17BAD400DD539A /* NightscoutUploadKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C10428961D17BAD400DD539A /* NightscoutUploadKit.framework */; }; C10B28461EA9BA5E006EA1FC /* far_future_high_bg_forecast.json in Resources */ = {isa = PBXBuildFile; fileRef = C10B28451EA9BA5E006EA1FC /* far_future_high_bg_forecast.json */; }; C11C87DD1E21E53500BB71D3 /* GlucoseThreshold.swift in Sources */ = {isa = PBXBuildFile; fileRef = C178249D1E19B62300D9D25C /* GlucoseThreshold.swift */; }; @@ -586,7 +586,7 @@ 4FC8C8001DEB93E400A1452E /* NSUserDefaults+StatusExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSUserDefaults+StatusExtension.swift"; sourceTree = ""; }; 4FF4D0FF1E18374700846527 /* WatchContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WatchContext.swift; sourceTree = ""; }; 540DED961E14C75F002B2491 /* EnliteSensorDisplayable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnliteSensorDisplayable.swift; sourceTree = ""; }; - 898E8E3D1F957A6A003EBE24 /* WKInterfaceButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WKInterfaceButton.swift; sourceTree = ""; }; + 899461B51F9DAC4700F7C49B /* WKInterfaceButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WKInterfaceButton.swift; sourceTree = ""; }; C10428961D17BAD400DD539A /* NightscoutUploadKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NightscoutUploadKit.framework; path = Carthage/Build/iOS/NightscoutUploadKit.framework; sourceTree = ""; }; C10B28451EA9BA5E006EA1FC /* far_future_high_bg_forecast.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = far_future_high_bg_forecast.json; sourceTree = ""; }; C12F21A61DFA79CB00748193 /* recommend_temp_basal_very_low_end_in_range.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = recommend_temp_basal_very_low_end_in_range.json; sourceTree = ""; }; @@ -696,8 +696,8 @@ 4F2C15801E0495B200E160D4 /* WatchContext+WatchApp.swift */, 43CB2B2A1D924D450079823D /* WCSession.swift */, 4328E0251CFBE2C500E199AA /* WKAlertAction.swift */, + 899461B51F9DAC4700F7C49B /* WKInterfaceButton.swift */, 4328E02E1CFBF81800E199AA /* WKInterfaceImage.swift */, - 898E8E3D1F957A6A003EBE24 /* WKInterfaceButton.swift */, ); path = Extensions; sourceTree = ""; @@ -1640,7 +1640,7 @@ 4FF4D1011E18375000846527 /* WatchContext.swift in Sources */, 435400311C9F744E00D5819C /* BolusSuggestionUserInfo.swift in Sources */, 43A9438A1B926B7B0051FA24 /* NotificationController.swift in Sources */, - 898E8E3E1F957A6A003EBE24 /* WKInterfaceButton.swift in Sources */, + 899461B61F9DAC4800F7C49B /* WKInterfaceButton.swift in Sources */, 43A943881B926B7B0051FA24 /* ExtensionDelegate.swift in Sources */, 4328E0291CFBE2C500E199AA /* NSUserDefaults.swift in Sources */, 4328E02F1CFBF81800E199AA /* WKInterfaceImage.swift in Sources */, diff --git a/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift b/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift index 85fb306b7d..2382afc27b 100644 --- a/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift +++ b/WatchApp Extension/Controllers/AddCarbsInterfaceController.swift @@ -24,25 +24,26 @@ final class AddCarbsInterfaceController: WKInterfaceController, IdentifiableClas return } - let titleColor = (activeValueButton === carbValueButton) ? UIColor.carbsColor : UIColor.white - carbValueButton.setTitleWithColor(title: String(carbValue), color: titleColor) + carbValueLabel.setText(String(carbValue)) } } + private let maximumDatePastInterval = TimeInterval(hours: 8) + + private let maximumDateFutureInterval = TimeInterval(hours: 4) + private var date = Date() { didSet { - let dateDay = Calendar.current.component(.day, from: date) let now = Date() - let currentDay = Calendar.current.component(.day, from: now) - if dateDay != currentDay { - let hourAndMinutes = Calendar.current.dateComponents([.hour, .minute], from: date) - let startOfCurrentDay = Calendar.current.startOfDay(for: now) - guard let adjustedDate = Calendar.current.date(byAdding: hourAndMinutes, to: startOfCurrentDay) else { return } - date = adjustedDate + let minimumDate = now.addingTimeInterval(-maximumDatePastInterval) + let maximumDate = now.addingTimeInterval(maximumDateFutureInterval) + if date < minimumDate { + date = minimumDate + } else if date > maximumDate { + date = maximumDate } - let titleColor = (activeValueButton === dateButton) ? UIColor.carbsColor : UIColor.white - dateButton.setTitleWithColor(title: dateFormatter.string(from: date), color: titleColor) + dateLabel.setText(dateFormatter.string(from: date)) } } @@ -70,35 +71,30 @@ final class AddCarbsInterfaceController: WKInterfaceController, IdentifiableClas } } - @IBOutlet var carbValueButton: WKInterfaceButton! + @IBOutlet var carbValueLabel: WKInterfaceLabel! @IBOutlet var minusButton: WKInterfaceButton! @IBOutlet var plusButton: WKInterfaceButton! - @IBOutlet var gramsLabel: WKInterfaceLabel! - - @IBOutlet var dateButton: WKInterfaceButton! - - var activeValueButton: WKInterfaceButton! { + @IBOutlet var dateLabel: WKInterfaceLabel! + + var activeValueLabel: WKInterfaceLabel! { didSet { - let carbGroupColor: UIColor - switch activeValueButton { - case carbValueButton: - carbValueButton.setTitleWithColor(title: String(carbValue), color: UIColor.carbsColor) - carbGroupColor = UIColor.carbsColor - dateButton.setTitleWithColor(title: dateFormatter.string(from: date), color: UIColor.white) - case dateButton: - dateButton.setTitleWithColor(title: dateFormatter.string(from: date), color: UIColor.carbsColor) - carbValueButton.setTitleWithColor(title: String(carbValue), color: UIColor.white) - carbGroupColor = UIColor.white + activeValueLabel.setTextColor(UIColor.carbsColor) + let accessoryColor: UIColor + switch activeValueLabel { + case carbValueLabel: + accessoryColor = UIColor.carbsColor + dateLabel.setTextColor(UIColor.lightGray) + case dateLabel: + accessoryColor = UIColor.lightGray + carbValueLabel.setTextColor(UIColor.lightGray) default: - carbGroupColor = UIColor.black + accessoryColor = UIColor.black } - - gramsLabel.setTextColor(carbGroupColor) - plusButton.setTitleWithColor(title: "+", color: carbGroupColor) - minusButton.setTitleWithColor(title: "-", color: carbGroupColor) + minusButton.setTitleWithColor(title: "-", color: accessoryColor) + plusButton.setTitleWithColor(title: "+", color: accessoryColor) } } @@ -114,7 +110,8 @@ final class AddCarbsInterfaceController: WKInterfaceController, IdentifiableClas // Configure interface objects here. crownSequencer.delegate = self - activeValueButton = carbValueButton + activeValueLabel = carbValueLabel + date = Date() absorptionTime = .medium } @@ -132,20 +129,20 @@ final class AddCarbsInterfaceController: WKInterfaceController, IdentifiableClas // MARK: - Actions - @IBAction func toggleActiveValueButton() { - activeValueButton = (activeValueButton === carbValueButton) ? dateButton : carbValueButton - } - @IBAction func decrementCarbValue() { - activeValueButton = carbValueButton + activeValueLabel = carbValueLabel carbValue -= 5 } @IBAction func incrementCarbValue() { - activeValueButton = carbValueButton + activeValueLabel = carbValueLabel carbValue += 5 } + @IBAction func toggleActiveValueLabel() { + activeValueLabel = (activeValueLabel === carbValueLabel) ? dateLabel : carbValueLabel + } + @IBAction func setAbsorptionTimeFast() { absorptionTime = .fast } @@ -197,10 +194,10 @@ extension AddCarbsInterfaceController: WKCrownDelegate { let remainder = accumulatedRotation.truncatingRemainder(dividingBy: rotationsPerIncrement) let delta = Int((accumulatedRotation - remainder) / rotationsPerIncrement) - switch activeValueButton { - case carbValueButton: + switch activeValueLabel { + case carbValueLabel: carbValue += delta - case dateButton: + case dateLabel: guard let changedDate = Calendar.current.date(byAdding: .minute, value: delta, to: date) else { return } date = changedDate default: diff --git a/WatchApp/Base.lproj/Interface.storyboard b/WatchApp/Base.lproj/Interface.storyboard index fe3842a96f..a01580ec5a 100644 --- a/WatchApp/Base.lproj/Interface.storyboard +++ b/WatchApp/Base.lproj/Interface.storyboard @@ -5,7 +5,7 @@ - + @@ -16,56 +16,57 @@ - + - + - - - - - - + + + + + + + + + + + - - + + - - - - - - + @@ -43,7 +43,7 @@ - + @@ -61,7 +61,7 @@ - + @@ -69,29 +69,20 @@