- added GPS quality indicator

This commit is contained in:
Guy Saldanha committed 2014-11-12 11:44:32 +01:00
1 parent bdad590b04
commit eed31094de
4 files changed
+104 -36

No files matched your search

+63 -29
View File
@@ -284,50 +284,84 @@
<color key="textColor" red="0.25098040700000002" green="0.50196081400000003" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="dY8-PA-7wP">
<rect key="frame" x="424" y="72" width="160" height="21"/>
<constraints>
<constraint firstAttribute="height" constant="21" id="nNX-BS-RWk"/>
<constraint firstAttribute="width" constant="160" id="xGs-zk-wfF"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00.00" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mUm-EE-6Is">
<rect key="frame" x="17" y="188" width="561" height="64"/>
<constraints>
<constraint firstAttribute="height" constant="64" id="DBi-nH-A4c"/>
<constraint firstAttribute="height" constant="64" id="a9S-3h-eFG"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="48"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CY5-XK-zgr">
<rect key="frame" x="476" y="77" width="21" height="11"/>
<color key="backgroundColor" red="0.54117647058823526" green="0.70980392156862748" blue="0.30588235294117649" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="11" id="EOH-yW-4us"/>
<constraint firstAttribute="width" constant="21" id="ZJD-QQ-sSd"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7J8-0s-XmP">
<rect key="frame" x="505" y="77" width="21" height="11"/>
<color key="backgroundColor" red="0.54117647058823526" green="0.70980392156862748" blue="0.30588235294117649" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="11" id="m1T-Dw-j2g"/>
<constraint firstAttribute="width" constant="21" id="zP0-Xm-xsw"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zse-sv-43R">
<rect key="frame" x="534" y="77" width="21" height="11"/>
<color key="backgroundColor" red="0.54117647058823526" green="0.70980392156862748" blue="0.30588235294117649" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="11" id="aNO-v5-KhF"/>
<constraint firstAttribute="width" constant="21" id="iok-bf-gEf"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fPT-R9-l89">
<rect key="frame" x="563" y="77" width="21" height="11"/>
<color key="backgroundColor" red="0.54117647058823526" green="0.70980392156862748" blue="0.30588235294117649" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="21" id="6u5-Ib-BM2"/>
<constraint firstAttribute="height" constant="11" id="j55-Rw-BLM"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="dY8-PA-7wP" firstAttribute="top" secondItem="mP6-V4-QPK" secondAttribute="top" constant="72" id="0fO-zc-LJA"/>
<constraint firstItem="IeZ-JM-OWw" firstAttribute="top" secondItem="NT1-c8-AwF" secondAttribute="bottom" constant="8" symbolic="YES" id="0kQ-GE-DID"/>
<constraint firstAttribute="trailingMargin" secondItem="mUm-EE-6Is" secondAttribute="trailing" constant="6" id="0mE-db-xOx"/>
<constraint firstItem="IeZ-JM-OWw" firstAttribute="leading" secondItem="NT1-c8-AwF" secondAttribute="leading" id="8VQ-Xq-WBe"/>
<constraint firstItem="xj9-FF-3W6" firstAttribute="leading" secondItem="9Mo-uS-sYi" secondAttribute="leading" id="BAN-S6-xY0"/>
<constraint firstItem="mUm-EE-6Is" firstAttribute="top" secondItem="IeZ-JM-OWw" secondAttribute="bottom" constant="8" symbolic="YES" id="Jzz-bP-lGG"/>
<constraint firstItem="dY8-PA-7wP" firstAttribute="leading" secondItem="mP6-V4-QPK" secondAttribute="leading" constant="424" id="Mm0-Uj-GEd"/>
<constraint firstItem="Ur0-mb-7N4" firstAttribute="trailing" secondItem="EWa-HT-PQE" secondAttribute="trailing" id="Twd-NA-6xI"/>
<constraint firstItem="xj9-FF-3W6" firstAttribute="leading" secondItem="mP6-V4-QPK" secondAttribute="leadingMargin" id="ePV-mW-4GI"/>
<constraint firstItem="IeZ-JM-OWw" firstAttribute="leading" secondItem="ULl-vy-5gb" secondAttribute="leading" id="eYc-f5-kSk"/>
<constraint firstAttribute="bottom" secondItem="ULl-vy-5gb" secondAttribute="bottom" constant="20" symbolic="YES" id="iZ7-Vx-JJ3"/>
<constraint firstItem="NT1-c8-AwF" firstAttribute="top" secondItem="9Mo-uS-sYi" secondAttribute="bottom" constant="8" symbolic="YES" id="nMG-tk-zx7"/>
<constraint firstItem="9Mo-uS-sYi" firstAttribute="baseline" secondItem="EWa-HT-PQE" secondAttribute="baseline" id="qWa-8q-wOY"/>
<constraint firstItem="9Mo-uS-sYi" firstAttribute="leading" secondItem="NT1-c8-AwF" secondAttribute="leading" id="uDR-Gi-qzN"/>
<constraint firstItem="mUm-EE-6Is" firstAttribute="leading" secondItem="mP6-V4-QPK" secondAttribute="leadingMargin" constant="1" id="vOt-ul-8J8"/>
<constraint firstItem="xj9-FF-3W6" firstAttribute="top" secondItem="lhj-Lt-OY9" secondAttribute="bottom" constant="8" symbolic="YES" id="wmW-Sd-mtE"/>
<constraint firstItem="ULl-vy-5gb" firstAttribute="trailing" secondItem="Ur0-mb-7N4" secondAttribute="trailing" id="yLI-7F-a0J"/>
<constraint firstItem="EWa-HT-PQE" firstAttribute="trailing" secondItem="mP6-V4-QPK" secondAttribute="trailingMargin" id="zUO-2z-W5Z"/>
<constraint firstItem="Ur0-mb-7N4" firstAttribute="baseline" secondItem="NT1-c8-AwF" secondAttribute="baseline" id="zjn-s1-M0T"/>
<constraint firstItem="9Mo-uS-sYi" firstAttribute="top" secondItem="xj9-FF-3W6" secondAttribute="bottom" constant="8" symbolic="YES" id="zxa-z0-6U7"/>
<constraint firstItem="9Mo-uS-sYi" firstAttribute="leading" secondItem="NT1-c8-AwF" secondAttribute="leading" id="2aT-I1-sda"/>
<constraint firstItem="NT1-c8-AwF" firstAttribute="top" secondItem="9Mo-uS-sYi" secondAttribute="bottom" constant="8" symbolic="YES" id="4cn-03-b6o"/>
<constraint firstItem="CY5-XK-zgr" firstAttribute="centerY" secondItem="zse-sv-43R" secondAttribute="centerY" id="7C4-Gz-bHx"/>
<constraint firstItem="IeZ-JM-OWw" firstAttribute="leading" secondItem="NT1-c8-AwF" secondAttribute="leading" id="Ado-mt-IeU"/>
<constraint firstItem="CY5-XK-zgr" firstAttribute="centerY" secondItem="xj9-FF-3W6" secondAttribute="centerY" id="Ahu-UI-Ee3"/>
<constraint firstItem="9Mo-uS-sYi" firstAttribute="leading" secondItem="xj9-FF-3W6" secondAttribute="leading" id="COM-YR-mcH"/>
<constraint firstAttribute="trailing" secondItem="EWa-HT-PQE" secondAttribute="trailing" constant="16" id="GkI-sc-5QQ"/>
<constraint firstItem="CY5-XK-zgr" firstAttribute="centerY" secondItem="fPT-R9-l89" secondAttribute="centerY" id="LEE-nf-7IS"/>
<constraint firstItem="zse-sv-43R" firstAttribute="leading" secondItem="7J8-0s-XmP" secondAttribute="trailing" constant="8" id="MAh-oZ-gKw"/>
<constraint firstAttribute="bottom" secondItem="ULl-vy-5gb" secondAttribute="bottom" constant="20" symbolic="YES" id="Mhf-jg-Rj5"/>
<constraint firstItem="ULl-vy-5gb" firstAttribute="leading" secondItem="mP6-V4-QPK" secondAttribute="leadingMargin" id="NiZ-NG-J07"/>
<constraint firstAttribute="trailingMargin" secondItem="mUm-EE-6Is" secondAttribute="trailing" constant="6" id="Npm-PJ-MOZ"/>
<constraint firstItem="CY5-XK-zgr" firstAttribute="centerY" secondItem="7J8-0s-XmP" secondAttribute="centerY" id="Qbs-ys-ZHv"/>
<constraint firstItem="mUm-EE-6Is" firstAttribute="top" secondItem="IeZ-JM-OWw" secondAttribute="bottom" constant="8" symbolic="YES" id="Sgq-Pj-oN8"/>
<constraint firstItem="xj9-FF-3W6" firstAttribute="top" secondItem="lhj-Lt-OY9" secondAttribute="bottom" constant="8" symbolic="YES" id="ajP-Io-QD1"/>
<constraint firstAttribute="trailing" secondItem="fPT-R9-l89" secondAttribute="trailing" constant="16" id="cjT-Sn-zVS"/>
<constraint firstItem="7J8-0s-XmP" firstAttribute="leading" secondItem="CY5-XK-zgr" secondAttribute="trailing" constant="8" id="dlD-cp-UyD"/>
<constraint firstItem="mUm-EE-6Is" firstAttribute="leading" secondItem="mP6-V4-QPK" secondAttribute="leadingMargin" constant="1" id="gh4-8W-Mre"/>
<constraint firstItem="EWa-HT-PQE" firstAttribute="baseline" secondItem="9Mo-uS-sYi" secondAttribute="baseline" id="oik-aU-Yj9"/>
<constraint firstItem="9Mo-uS-sYi" firstAttribute="top" secondItem="xj9-FF-3W6" secondAttribute="bottom" constant="8" symbolic="YES" id="qKt-ha-VrH"/>
<constraint firstAttribute="centerX" secondItem="ULl-vy-5gb" secondAttribute="centerX" id="rCl-vT-o7g"/>
<constraint firstItem="Ur0-mb-7N4" firstAttribute="baseline" secondItem="NT1-c8-AwF" secondAttribute="baseline" id="rpW-GQ-ZYE"/>
<constraint firstItem="ULl-vy-5gb" firstAttribute="leading" secondItem="IeZ-JM-OWw" secondAttribute="leading" id="syD-YV-Vct"/>
<constraint firstItem="IeZ-JM-OWw" firstAttribute="top" secondItem="NT1-c8-AwF" secondAttribute="bottom" constant="8" symbolic="YES" id="tyg-Qq-0IJ"/>
<constraint firstAttribute="trailing" secondItem="Ur0-mb-7N4" secondAttribute="trailing" constant="16" id="x5p-zX-lmW"/>
<constraint firstItem="fPT-R9-l89" firstAttribute="leading" secondItem="zse-sv-43R" secondAttribute="trailing" constant="8" id="zdH-b3-ndc"/>
</constraints>
</view>
<navigationItem key="navigationItem" title="Tracking" id="fyS-rY-bYp"/>
<connections>
<outlet property="gpsQualityImageView" destination="dY8-PA-7wP" id="mI3-el-hbU"/>
<outlet property="gpsQuality1" destination="CY5-XK-zgr" id="lVe-fG-sfc"/>
<outlet property="gpsQuality2" destination="7J8-0s-XmP" id="JYI-4K-BRG"/>
<outlet property="gpsQuality3" destination="zse-sv-43R" id="efE-oH-thD"/>
<outlet property="gpsQuality4" destination="fPT-R9-l89" id="B5v-p8-uLi"/>
<outlet property="onlineModeLabel" destination="Ur0-mb-7N4" id="2O3-v4-DWs"/>
<outlet property="trackingStatusLabel" destination="EWa-HT-PQE" id="Btt-L7-ziR"/>
<outlet property="trackingTimeLabel" destination="mUm-EE-6Is" id="9qQ-3T-CNP"/>
+3 -3
View File
@@ -17,8 +17,8 @@ extension UIColor {
self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
}
convenience init(netHex:Int) {
self.init(red:(netHex >> 16) & 0xff, green:(netHex >> 8) & 0xff, blue:netHex & 0xff)
convenience init(hex:Int) {
self.init(red:(hex >> 16) & 0xff, green:(hex >> 8) & 0xff, blue:hex & 0xff)
}
}
+2 -1
View File
@@ -79,7 +79,8 @@ class LocationManager: NSObject, CLLocationManagerDelegate {
"latitude" : location.coordinate.latitude,
"longitude": location.coordinate.longitude,
"speed": location.speed,
"course": location.course
"course": location.course,
"horizontalAccuracy": location.horizontalAccuracy
]
}
}
+36 -3
View File
@@ -13,11 +13,18 @@ class TrackingViewController : UIViewController, UIAlertViewDelegate {
enum AlertViewTag: Int {
case StopTracking
}
@IBOutlet weak var gpsQualityImageView: UIImageView!
@IBOutlet weak var gpsQuality1: UIView!
@IBOutlet weak var gpsQuality2: UIView!
@IBOutlet weak var gpsQuality3: UIView!
@IBOutlet weak var gpsQuality4: UIView!
@IBOutlet weak var trackingStatusLabel: UILabel!
@IBOutlet weak var onlineModeLabel: UILabel!
@IBOutlet weak var trackingTimeLabel: UILabel!
let gpsActiveColor = UIColor(hex: 0x8AB54D)
let gpsInactiveColor = UIColor(hex: 0x445A2F)
let onlineColor = UIColor(hex: 0x408000)
let offlineColor = UIColor(hex: 0xFF0000)
let startDate = NSDate()
let dateFormatter = NSDateFormatter()
@@ -29,6 +36,7 @@ class TrackingViewController : UIViewController, UIAlertViewDelegate {
// register for notifications
NSNotificationCenter.defaultCenter().addObserver(self, selector:"networkAvailabilityChanged", name:APIManager.NotificationType.networkAvailabilityChanged, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector:"newLocation:", name:LocationManager.NotificationType.newLocation, object: nil)
// timer
let timer = NSTimer(timeInterval: 0.1, target: self, selector: "timerTick:", userInfo: nil, repeats: true)
@@ -47,10 +55,35 @@ class TrackingViewController : UIViewController, UIAlertViewDelegate {
func networkAvailabilityChanged() {
if (APIManager.sharedManager.networkAvailable) {
onlineModeLabel.text = "Online"
onlineModeLabel.textColor = UIColor(netHex: 0x408000)
onlineModeLabel.textColor = onlineColor
} else {
onlineModeLabel.text = "Offline"
onlineModeLabel.textColor = UIColor(netHex: 0xFF0000)
onlineModeLabel.textColor = offlineColor
}
}
func newLocation(notification: NSNotification) {
let horizontalAccuracy = notification.userInfo!["horizontalAccuracy"] as Double
gpsQuality1.backgroundColor = gpsInactiveColor
gpsQuality2.backgroundColor = gpsInactiveColor
gpsQuality3.backgroundColor = gpsInactiveColor
gpsQuality4.backgroundColor = gpsInactiveColor
if (horizontalAccuracy < 0) {
}
else if (horizontalAccuracy > 163) {
gpsQuality1.backgroundColor = gpsActiveColor
gpsQuality2.backgroundColor = gpsActiveColor
}
else if (horizontalAccuracy > 48) {
gpsQuality1.backgroundColor = gpsActiveColor
gpsQuality2.backgroundColor = gpsActiveColor
gpsQuality3.backgroundColor = gpsActiveColor
}
else {
gpsQuality1.backgroundColor = gpsActiveColor
gpsQuality2.backgroundColor = gpsActiveColor
gpsQuality3.backgroundColor = gpsActiveColor
gpsQuality4.backgroundColor = gpsActiveColor
}
}