Working View with Descriptions and adaptive font size

This commit is contained in:
Kilian Hofmann 2016-03-21 19:02:56 +01:00
parent 1655cd0806
commit a7fca6f542
9 changed files with 537 additions and 148 deletions

View File

@ -17,6 +17,10 @@
E22EE9DF1C9DB7B3001F5BC0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E22EE9DD1C9DB7B3001F5BC0 /* LaunchScreen.storyboard */; };
E22EE9EA1C9DB7B4001F5BC0 /* FMC_Planner_2Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = E22EE9E91C9DB7B4001F5BC0 /* FMC_Planner_2Tests.m */; };
E22EE9F51C9DB7B4001F5BC0 /* FMC_Planner_2UITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E22EE9F41C9DB7B4001F5BC0 /* FMC_Planner_2UITests.m */; };
E28E106D1C9FF93D006E2C6B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E28E106C1C9FF93D006E2C6B /* QuartzCore.framework */; };
E28E10711CA01EC9006E2C6B /* Menu.plist in Resources */ = {isa = PBXBuildFile; fileRef = E28E10701CA01EC9006E2C6B /* Menu.plist */; };
E28E10731CA0375F006E2C6B /* Route.plist in Resources */ = {isa = PBXBuildFile; fileRef = E28E10721CA0375F006E2C6B /* Route.plist */; };
E28E10751CA037F2006E2C6B /* Perf Init.plist in Resources */ = {isa = PBXBuildFile; fileRef = E28E10741CA037F2006E2C6B /* Perf Init.plist */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -57,6 +61,10 @@
E22EE9F01C9DB7B4001F5BC0 /* FMC Planner 2UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "FMC Planner 2UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
E22EE9F41C9DB7B4001F5BC0 /* FMC_Planner_2UITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FMC_Planner_2UITests.m; sourceTree = "<group>"; };
E22EE9F61C9DB7B4001F5BC0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
E28E106C1C9FF93D006E2C6B /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
E28E10701CA01EC9006E2C6B /* Menu.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Menu.plist; sourceTree = "<group>"; };
E28E10721CA0375F006E2C6B /* Route.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Route.plist; sourceTree = "<group>"; };
E28E10741CA037F2006E2C6B /* Perf Init.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Perf Init.plist"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -64,6 +72,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
E28E106D1C9FF93D006E2C6B /* QuartzCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -87,6 +96,7 @@
E22EE9C31C9DB7B3001F5BC0 = {
isa = PBXGroup;
children = (
E28E106C1C9FF93D006E2C6B /* QuartzCore.framework */,
E22EE9CE1C9DB7B3001F5BC0 /* FMC Planner 2 */,
E22EE9E81C9DB7B4001F5BC0 /* FMC Planner 2Tests */,
E22EE9F31C9DB7B4001F5BC0 /* FMC Planner 2UITests */,
@ -107,19 +117,15 @@
E22EE9CE1C9DB7B3001F5BC0 /* FMC Planner 2 */ = {
isa = PBXGroup;
children = (
E28E106F1CA01EA1006E2C6B /* Screens */,
E28E106E1CA01E34006E2C6B /* ViewControllers */,
E22EE9D21C9DB7B3001F5BC0 /* AppDelegate.h */,
E22EE9D31C9DB7B3001F5BC0 /* AppDelegate.m */,
E22EE9D51C9DB7B3001F5BC0 /* ViewController.h */,
E22EE9D61C9DB7B3001F5BC0 /* ViewController.m */,
E22EE9D81C9DB7B3001F5BC0 /* Main.storyboard */,
E22EE9DB1C9DB7B3001F5BC0 /* Assets.xcassets */,
E22EE9DD1C9DB7B3001F5BC0 /* LaunchScreen.storyboard */,
E22EE9E01C9DB7B3001F5BC0 /* Info.plist */,
E22EE9CF1C9DB7B3001F5BC0 /* Supporting Files */,
E227C7811C9F42AB00DE0CA4 /* ViewControllerKeyboard.h */,
E227C7821C9F42AB00DE0CA4 /* ViewControllerKeyboard.m */,
E227C7841C9F474100DE0CA4 /* ViewControllerScreen.h */,
E227C7851C9F474100DE0CA4 /* ViewControllerScreen.m */,
);
path = "FMC Planner 2";
sourceTree = "<group>";
@ -150,6 +156,29 @@
path = "FMC Planner 2UITests";
sourceTree = "<group>";
};
E28E106E1CA01E34006E2C6B /* ViewControllers */ = {
isa = PBXGroup;
children = (
E22EE9D51C9DB7B3001F5BC0 /* ViewController.h */,
E22EE9D61C9DB7B3001F5BC0 /* ViewController.m */,
E227C7811C9F42AB00DE0CA4 /* ViewControllerKeyboard.h */,
E227C7821C9F42AB00DE0CA4 /* ViewControllerKeyboard.m */,
E227C7841C9F474100DE0CA4 /* ViewControllerScreen.h */,
E227C7851C9F474100DE0CA4 /* ViewControllerScreen.m */,
);
name = ViewControllers;
sourceTree = "<group>";
};
E28E106F1CA01EA1006E2C6B /* Screens */ = {
isa = PBXGroup;
children = (
E28E10701CA01EC9006E2C6B /* Menu.plist */,
E28E10721CA0375F006E2C6B /* Route.plist */,
E28E10741CA037F2006E2C6B /* Perf Init.plist */,
);
name = Screens;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -256,8 +285,11 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E28E10751CA037F2006E2C6B /* Perf Init.plist in Resources */,
E22EE9DF1C9DB7B3001F5BC0 /* LaunchScreen.storyboard in Resources */,
E28E10711CA01EC9006E2C6B /* Menu.plist in Resources */,
E22EE9DC1C9DB7B3001F5BC0 /* Assets.xcassets in Resources */,
E28E10731CA0375F006E2C6B /* Route.plist in Resources */,
E22EE9DA1C9DB7B3001F5BC0 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;

View File

@ -3,22 +3,6 @@
type = "1"
version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "FMC Planner 2/ViewController.m"
timestampString = "480202380.506075"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "20"
endingLineNumber = "20"
landmarkName = "-viewDidLoad"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
@ -26,12 +10,12 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "FMC Planner 2/ViewControllerScreen.m"
timestampString = "480202890.028996"
timestampString = "480272616.265986"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "13"
endingLineNumber = "13"
landmarkName = "-viewDidLoad"
startingLineNumber = "77"
endingLineNumber = "77"
landmarkName = "-enterLSK:"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
@ -42,12 +26,12 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "FMC Planner 2/ViewControllerScreen.m"
timestampString = "480204314.085838"
timestampString = "480272640.14232"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "59"
endingLineNumber = "59"
landmarkName = "-findAdaptiveFontForUILabelSize:withMinimumSize:"
startingLineNumber = "78"
endingLineNumber = "78"
landmarkName = "-enterLSK:"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>

View File

@ -58,10 +58,86 @@
<scene sceneID="5qk-4d-y7r">
<objects>
<viewController id="95d-KR-EPk" customClass="ViewControllerScreen" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="zhJ-IO-M6h"/>
<viewControllerLayoutGuide type="bottom" id="OZl-5f-UyQ"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="OIy-VZ-hKa">
<rect key="frame" x="0.0" y="0.0" width="280" height="320"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tri" translatesAutoresizingMaskIntoConstraints="NO" id="IGk-yC-XZe">
<rect key="frame" x="0.0" y="32" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="5ec-wt-eDI"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tri" translatesAutoresizingMaskIntoConstraints="NO" id="lb4-oR-Xay">
<rect key="frame" x="0.0" y="73" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="e11-e4-62Z"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tri" translatesAutoresizingMaskIntoConstraints="NO" id="D1W-S3-C7a">
<rect key="frame" x="0.0" y="114" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="zIW-5q-GlK"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tri" translatesAutoresizingMaskIntoConstraints="NO" id="Omt-i6-epz">
<rect key="frame" x="0.0" y="155" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="hnc-hf-oCX"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tri" translatesAutoresizingMaskIntoConstraints="NO" id="XtE-U2-OvI">
<rect key="frame" x="0.0" y="196" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="nhi-xa-NCX"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tri" translatesAutoresizingMaskIntoConstraints="NO" id="PpH-bA-o5Z">
<rect key="frame" x="0.0" y="237" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="LP8-qx-tIu"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="triFlip" translatesAutoresizingMaskIntoConstraints="NO" id="wFL-EP-4Yy">
<rect key="frame" x="270" y="32" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="8tY-Sl-rvZ"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="triFlip" translatesAutoresizingMaskIntoConstraints="NO" id="5Yx-S5-XzQ">
<rect key="frame" x="270" y="73" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="Nhb-6B-qtU"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="triFlip" translatesAutoresizingMaskIntoConstraints="NO" id="6eg-39-ebF">
<rect key="frame" x="270" y="114" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="qHk-MT-rfQ"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="triFlip" translatesAutoresizingMaskIntoConstraints="NO" id="CbW-kY-rsi">
<rect key="frame" x="270" y="155" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="HVk-Xe-Jeg"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="triFlip" translatesAutoresizingMaskIntoConstraints="NO" id="9aG-vP-PVQ">
<rect key="frame" x="270" y="196" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="xJR-UA-05c"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="triFlip" translatesAutoresizingMaskIntoConstraints="NO" id="2kZ-oH-jjl">
<rect key="frame" x="270" y="237" width="10" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="Hty-ZU-cai"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="HEADER" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XM8-XW-Thc">
<rect key="frame" x="0.0" y="0.0" width="280" height="32"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
@ -76,85 +152,85 @@
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK L1" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MIm-Gy-q67">
<rect key="frame" x="0.0" y="42" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="0" text="LSK L1" textAlignment="natural" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MIm-Gy-q67">
<rect key="frame" x="10" y="32" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK L2" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="U4f-Vu-Ndd">
<rect key="frame" x="0.0" y="83" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="1" text="LSK L2" textAlignment="natural" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="U4f-Vu-Ndd">
<rect key="frame" x="10" y="72" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK L3" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="V0G-fZ-ZJT">
<rect key="frame" x="0.0" y="124" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="2" text="LSK L3" textAlignment="natural" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="V0G-fZ-ZJT">
<rect key="frame" x="10" y="112" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK L4" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VgL-pC-APf">
<rect key="frame" x="0.0" y="165" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="3" text="LSK L4" textAlignment="natural" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VgL-pC-APf">
<rect key="frame" x="10" y="152" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK L5" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tfZ-qv-ibD">
<rect key="frame" x="0.0" y="205" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="4" text="LSK L5" textAlignment="natural" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tfZ-qv-ibD">
<rect key="frame" x="10" y="192" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK L6" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yqS-gh-OfG">
<rect key="frame" x="0.0" y="246" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="5" text="LSK L6" textAlignment="natural" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yqS-gh-OfG">
<rect key="frame" x="10" y="232" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK R1" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mLq-tt-1zJ">
<rect key="frame" x="140" y="42" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="6" text="LSK R1" textAlignment="right" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mLq-tt-1zJ">
<rect key="frame" x="140" y="32" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK R2" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AwP-om-AgF">
<rect key="frame" x="140" y="83" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="7" text="LSK R2" textAlignment="right" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AwP-om-AgF">
<rect key="frame" x="140" y="72" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK R3" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="V92-YJ-dNW">
<rect key="frame" x="140" y="124" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="8" text="LSK R3" textAlignment="right" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="V92-YJ-dNW">
<rect key="frame" x="140" y="112" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK R4" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Esv-Y3-Olm">
<rect key="frame" x="140" y="165" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="9" text="LSK R4" textAlignment="right" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Esv-Y3-Olm">
<rect key="frame" x="140" y="152" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK R5" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uOW-rw-RDG">
<rect key="frame" x="140" y="205" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="10" text="LSK R5" textAlignment="right" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uOW-rw-RDG">
<rect key="frame" x="140" y="192" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LSK R6" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gFA-yv-8Ol">
<rect key="frame" x="140" y="246" width="140" height="32"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" restorationIdentifier="11" text="LSK R6" textAlignment="right" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gFA-yv-8Ol">
<rect key="frame" x="140" y="232" width="130" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
@ -167,75 +243,125 @@
</subviews>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="V0G-fZ-ZJT" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="0Gr-ja-DAg"/>
<constraint firstItem="MIm-Gy-q67" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="1ri-gp-oNv"/>
<constraint firstItem="V0G-fZ-ZJT" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" constant="10" id="0Gr-ja-DAg"/>
<constraint firstItem="lb4-oR-Xay" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="1Ur-ng-0Un"/>
<constraint firstItem="MIm-Gy-q67" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="1ri-gp-oNv"/>
<constraint firstItem="uOW-rw-RDG" firstAttribute="leading" secondItem="tfZ-qv-ibD" secondAttribute="trailing" id="2pO-hz-2wn"/>
<constraint firstItem="gFA-yv-8Ol" firstAttribute="top" secondItem="uOW-rw-RDG" secondAttribute="bottom" constant="9" id="4NR-Ck-f38"/>
<constraint firstItem="Omt-i6-epz" firstAttribute="top" secondItem="D1W-S3-C7a" secondAttribute="bottom" constant="1" id="35S-bu-RaG"/>
<constraint firstItem="tfZ-qv-ibD" firstAttribute="leading" secondItem="XtE-U2-OvI" secondAttribute="trailing" id="3KG-KZ-lxa"/>
<constraint firstItem="lb4-oR-Xay" firstAttribute="top" secondItem="IGk-yC-XZe" secondAttribute="bottom" constant="1" id="3iT-da-00Y"/>
<constraint firstItem="gFA-yv-8Ol" firstAttribute="top" secondItem="uOW-rw-RDG" secondAttribute="bottom" id="4NR-Ck-f38"/>
<constraint firstItem="XM8-XW-Thc" firstAttribute="top" secondItem="OIy-VZ-hKa" secondAttribute="top" id="4m4-vJ-gEn"/>
<constraint firstItem="XM8-XW-Thc" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" id="4vK-Dl-V64"/>
<constraint firstItem="mLq-tt-1zJ" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="5d8-UW-vUS"/>
<constraint firstItem="gFA-yv-8Ol" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="5wo-KZ-V19"/>
<constraint firstItem="yqS-gh-OfG" firstAttribute="top" secondItem="tfZ-qv-ibD" secondAttribute="bottom" constant="9" id="608-25-PfG"/>
<constraint firstItem="mLq-tt-1zJ" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="5d8-UW-vUS"/>
<constraint firstItem="gFA-yv-8Ol" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="5wo-KZ-V19"/>
<constraint firstItem="yqS-gh-OfG" firstAttribute="top" secondItem="tfZ-qv-ibD" secondAttribute="bottom" id="608-25-PfG"/>
<constraint firstItem="V92-YJ-dNW" firstAttribute="leading" secondItem="V0G-fZ-ZJT" secondAttribute="trailing" id="74U-DZ-ZWj"/>
<constraint firstAttribute="trailing" secondItem="Esv-Y3-Olm" secondAttribute="trailing" id="7J0-xP-kkd"/>
<constraint firstAttribute="trailing" secondItem="uOW-rw-RDG" secondAttribute="trailing" id="8DB-sx-4Ua"/>
<constraint firstItem="U4f-Vu-Ndd" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="98u-fB-5S7"/>
<constraint firstItem="V92-YJ-dNW" firstAttribute="top" secondItem="AwP-om-AgF" secondAttribute="bottom" constant="9" id="B5k-zJ-wP4"/>
<constraint firstItem="Esv-Y3-Olm" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="DGg-2K-j1F"/>
<constraint firstItem="tfZ-qv-ibD" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="EQq-eK-5r5"/>
<constraint firstItem="VgL-pC-APf" firstAttribute="top" secondItem="V0G-fZ-ZJT" secondAttribute="bottom" constant="9" id="FAe-3X-xIv"/>
<constraint firstAttribute="trailing" secondItem="gFA-yv-8Ol" secondAttribute="trailing" id="ITv-bW-Qkv"/>
<constraint firstItem="U4f-Vu-Ndd" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="Jlo-2s-fyk"/>
<constraint firstItem="uOW-rw-RDG" firstAttribute="top" secondItem="Esv-Y3-Olm" secondAttribute="bottom" constant="8" id="KMB-IB-wK3"/>
<constraint firstItem="V0G-fZ-ZJT" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="KWc-6E-9aE"/>
<constraint firstItem="OZt-T0-7yr" firstAttribute="top" secondItem="gFA-yv-8Ol" secondAttribute="bottom" constant="4.5" id="LaR-K5-67H"/>
<constraint firstAttribute="trailing" secondItem="V92-YJ-dNW" secondAttribute="trailing" id="MYF-KH-g4v"/>
<constraint firstItem="V0G-fZ-ZJT" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="N3L-yG-TM0"/>
<constraint firstItem="MIm-Gy-q67" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="Ndt-ab-zZU"/>
<constraint firstAttribute="trailing" secondItem="Esv-Y3-Olm" secondAttribute="trailing" constant="10" id="7J0-xP-kkd"/>
<constraint firstItem="XtE-U2-OvI" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="7hP-pf-vAD"/>
<constraint firstAttribute="trailing" secondItem="uOW-rw-RDG" secondAttribute="trailing" constant="10" id="8DB-sx-4Ua"/>
<constraint firstItem="U4f-Vu-Ndd" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="98u-fB-5S7"/>
<constraint firstItem="lb4-oR-Xay" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="9ay-wS-clU"/>
<constraint firstItem="V0G-fZ-ZJT" firstAttribute="leading" secondItem="D1W-S3-C7a" secondAttribute="trailing" id="AZS-cU-u0L"/>
<constraint firstItem="wFL-EP-4Yy" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="Ano-Wo-jmn"/>
<constraint firstItem="5Yx-S5-XzQ" firstAttribute="leading" secondItem="AwP-om-AgF" secondAttribute="trailing" id="AzN-Xv-BpE"/>
<constraint firstItem="VgL-pC-APf" firstAttribute="leading" secondItem="Omt-i6-epz" secondAttribute="trailing" id="B3A-8L-R7y"/>
<constraint firstItem="V92-YJ-dNW" firstAttribute="top" secondItem="AwP-om-AgF" secondAttribute="bottom" id="B5k-zJ-wP4"/>
<constraint firstItem="Esv-Y3-Olm" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="DGg-2K-j1F"/>
<constraint firstAttribute="trailing" secondItem="CbW-kY-rsi" secondAttribute="trailing" id="Dc5-UF-af4"/>
<constraint firstItem="XtE-U2-OvI" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="Deg-q9-K3N"/>
<constraint firstItem="6eg-39-ebF" firstAttribute="top" secondItem="5Yx-S5-XzQ" secondAttribute="bottom" constant="1" id="Dje-1k-4Oh"/>
<constraint firstItem="tfZ-qv-ibD" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" constant="10" id="EQq-eK-5r5"/>
<constraint firstItem="VgL-pC-APf" firstAttribute="top" secondItem="V0G-fZ-ZJT" secondAttribute="bottom" id="FAe-3X-xIv"/>
<constraint firstItem="Omt-i6-epz" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="FLR-Mo-AYR"/>
<constraint firstItem="CbW-kY-rsi" firstAttribute="top" secondItem="6eg-39-ebF" secondAttribute="bottom" constant="1" id="HTz-1p-ehT"/>
<constraint firstAttribute="trailing" secondItem="gFA-yv-8Ol" secondAttribute="trailing" constant="10" id="ITv-bW-Qkv"/>
<constraint firstItem="6eg-39-ebF" firstAttribute="leading" secondItem="V92-YJ-dNW" secondAttribute="trailing" id="IbV-uv-r18"/>
<constraint firstAttribute="trailing" secondItem="5Yx-S5-XzQ" secondAttribute="trailing" id="IyG-K2-DyH"/>
<constraint firstItem="9aG-vP-PVQ" firstAttribute="top" secondItem="CbW-kY-rsi" secondAttribute="bottom" constant="1" id="JAE-hs-ife"/>
<constraint firstItem="U4f-Vu-Ndd" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" constant="10" id="Jlo-2s-fyk"/>
<constraint firstItem="9aG-vP-PVQ" firstAttribute="leading" secondItem="uOW-rw-RDG" secondAttribute="trailing" id="JpZ-7n-Bba"/>
<constraint firstItem="uOW-rw-RDG" firstAttribute="top" secondItem="Esv-Y3-Olm" secondAttribute="bottom" id="KMB-IB-wK3"/>
<constraint firstItem="V0G-fZ-ZJT" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="KWc-6E-9aE"/>
<constraint firstItem="OZt-T0-7yr" firstAttribute="top" secondItem="gFA-yv-8Ol" secondAttribute="bottom" constant="10" id="LaR-K5-67H"/>
<constraint firstItem="PpH-bA-o5Z" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="LxZ-M7-f0h"/>
<constraint firstAttribute="trailing" secondItem="V92-YJ-dNW" secondAttribute="trailing" constant="10" id="MYF-KH-g4v"/>
<constraint firstItem="V0G-fZ-ZJT" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="N3L-yG-TM0"/>
<constraint firstItem="MIm-Gy-q67" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="Ndt-ab-zZU"/>
<constraint firstAttribute="trailing" secondItem="9aG-vP-PVQ" secondAttribute="trailing" id="NeK-Ae-egp"/>
<constraint firstItem="XM8-XW-Thc" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="Nnx-ta-Rgg"/>
<constraint firstItem="VgL-pC-APf" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="Ocb-aa-P54"/>
<constraint firstItem="VgL-pC-APf" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" constant="10" id="Ocb-aa-P54"/>
<constraint firstItem="AwP-om-AgF" firstAttribute="leading" secondItem="U4f-Vu-Ndd" secondAttribute="trailing" id="Oe5-1u-Eiw"/>
<constraint firstAttribute="trailing" secondItem="AwP-om-AgF" secondAttribute="trailing" id="PXF-tT-Go3"/>
<constraint firstAttribute="trailing" secondItem="AwP-om-AgF" secondAttribute="trailing" constant="10" id="PXF-tT-Go3"/>
<constraint firstAttribute="trailing" secondItem="XM8-XW-Thc" secondAttribute="trailing" id="PZy-PF-bUk"/>
<constraint firstItem="MIm-Gy-q67" firstAttribute="top" secondItem="XM8-XW-Thc" secondAttribute="bottom" constant="10" id="QCG-E1-Oin"/>
<constraint firstItem="MIm-Gy-q67" firstAttribute="leading" secondItem="IGk-yC-XZe" secondAttribute="trailing" id="Pyn-gD-PG9"/>
<constraint firstItem="6eg-39-ebF" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="Q2e-Vi-WPF"/>
<constraint firstItem="MIm-Gy-q67" firstAttribute="top" secondItem="XM8-XW-Thc" secondAttribute="bottom" id="QCG-E1-Oin"/>
<constraint firstItem="XtE-U2-OvI" firstAttribute="top" secondItem="Omt-i6-epz" secondAttribute="bottom" constant="1" id="QZ9-tP-h4a"/>
<constraint firstItem="XM8-XW-Thc" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="QaQ-u2-xfM"/>
<constraint firstItem="U4f-Vu-Ndd" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="RtY-fq-GMM"/>
<constraint firstItem="AwP-om-AgF" firstAttribute="top" secondItem="mLq-tt-1zJ" secondAttribute="bottom" constant="9" id="W4E-k2-DSv"/>
<constraint firstItem="CbW-kY-rsi" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="RIV-xo-sVz"/>
<constraint firstItem="U4f-Vu-Ndd" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="RtY-fq-GMM"/>
<constraint firstAttribute="trailing" secondItem="2kZ-oH-jjl" secondAttribute="trailing" id="TAK-cA-ImK"/>
<constraint firstItem="PpH-bA-o5Z" firstAttribute="top" secondItem="XtE-U2-OvI" secondAttribute="bottom" constant="1" id="Tao-6J-wFc"/>
<constraint firstItem="yqS-gh-OfG" firstAttribute="leading" secondItem="PpH-bA-o5Z" secondAttribute="trailing" id="UhE-3m-RJM"/>
<constraint firstItem="2kZ-oH-jjl" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="Uyh-IT-M6s"/>
<constraint firstItem="OZt-T0-7yr" firstAttribute="top" secondItem="2kZ-oH-jjl" secondAttribute="bottom" constant="5" id="Vrh-qX-Zaa"/>
<constraint firstItem="AwP-om-AgF" firstAttribute="top" secondItem="mLq-tt-1zJ" secondAttribute="bottom" id="W4E-k2-DSv"/>
<constraint firstItem="U4f-Vu-Ndd" firstAttribute="leading" secondItem="lb4-oR-Xay" secondAttribute="trailing" id="WI5-vq-YgF"/>
<constraint firstItem="5Yx-S5-XzQ" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="WN4-Ts-nSB"/>
<constraint firstItem="gFA-yv-8Ol" firstAttribute="leading" secondItem="yqS-gh-OfG" secondAttribute="trailing" id="Wf2-Nt-jqg"/>
<constraint firstItem="mLq-tt-1zJ" firstAttribute="top" secondItem="XM8-XW-Thc" secondAttribute="bottom" constant="10" id="XIs-7o-JOQ"/>
<constraint firstItem="AwP-om-AgF" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="Xhd-yD-0mI"/>
<constraint firstItem="mLq-tt-1zJ" firstAttribute="top" secondItem="XM8-XW-Thc" secondAttribute="bottom" id="XIs-7o-JOQ"/>
<constraint firstAttribute="trailing" secondItem="6eg-39-ebF" secondAttribute="trailing" id="XKA-WE-C73"/>
<constraint firstItem="AwP-om-AgF" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="Xhd-yD-0mI"/>
<constraint firstItem="mLq-tt-1zJ" firstAttribute="leading" secondItem="MIm-Gy-q67" secondAttribute="trailing" id="Yc5-2c-S3L"/>
<constraint firstItem="Esv-Y3-Olm" firstAttribute="top" secondItem="V92-YJ-dNW" secondAttribute="bottom" constant="9" id="Zn8-4h-D2d"/>
<constraint firstItem="9aG-vP-PVQ" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="Ysu-3j-jgV"/>
<constraint firstItem="Esv-Y3-Olm" firstAttribute="top" secondItem="V92-YJ-dNW" secondAttribute="bottom" id="Zn8-4h-D2d"/>
<constraint firstAttribute="trailing" secondItem="a2c-Z9-N83" secondAttribute="trailing" id="aJ2-Pn-qxf"/>
<constraint firstItem="uOW-rw-RDG" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="abA-um-ge8"/>
<constraint firstItem="V92-YJ-dNW" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="aeA-ir-n7M"/>
<constraint firstItem="gFA-yv-8Ol" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="c17-ne-CDG"/>
<constraint firstItem="U4f-Vu-Ndd" firstAttribute="top" secondItem="MIm-Gy-q67" secondAttribute="bottom" constant="9" id="ceR-nJ-lIB"/>
<constraint firstItem="VgL-pC-APf" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="cme-0y-Fom"/>
<constraint firstAttribute="trailing" secondItem="mLq-tt-1zJ" secondAttribute="trailing" id="dyP-SS-GGB"/>
<constraint firstItem="mLq-tt-1zJ" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="efI-4F-f3A"/>
<constraint firstItem="a2c-Z9-N83" firstAttribute="top" secondItem="gFA-yv-8Ol" secondAttribute="bottom" constant="9" id="fJW-zU-YBP"/>
<constraint firstItem="Esv-Y3-Olm" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="gmc-iO-ygq"/>
<constraint firstItem="VgL-pC-APf" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="hdP-H1-akZ"/>
<constraint firstItem="uOW-rw-RDG" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="iD0-rP-7h9"/>
<constraint firstItem="V0G-fZ-ZJT" firstAttribute="top" secondItem="U4f-Vu-Ndd" secondAttribute="bottom" constant="9" id="iDQ-S0-K9e"/>
<constraint firstItem="yqS-gh-OfG" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="jPE-Pu-JLV"/>
<constraint firstItem="uOW-rw-RDG" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="abA-um-ge8"/>
<constraint firstItem="V92-YJ-dNW" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="aeA-ir-n7M"/>
<constraint firstItem="gFA-yv-8Ol" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="c17-ne-CDG"/>
<constraint firstItem="U4f-Vu-Ndd" firstAttribute="top" secondItem="MIm-Gy-q67" secondAttribute="bottom" id="ceR-nJ-lIB"/>
<constraint firstItem="VgL-pC-APf" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="cme-0y-Fom"/>
<constraint firstItem="D1W-S3-C7a" firstAttribute="top" secondItem="lb4-oR-Xay" secondAttribute="bottom" constant="1" id="dWT-FP-oUL"/>
<constraint firstAttribute="trailing" secondItem="mLq-tt-1zJ" secondAttribute="trailing" constant="10" id="dyP-SS-GGB"/>
<constraint firstItem="IGk-yC-XZe" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="eMy-9P-gmE"/>
<constraint firstItem="mLq-tt-1zJ" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="efI-4F-f3A"/>
<constraint firstItem="a2c-Z9-N83" firstAttribute="top" secondItem="gFA-yv-8Ol" secondAttribute="bottom" constant="15" id="fJW-zU-YBP"/>
<constraint firstItem="wFL-EP-4Yy" firstAttribute="leading" secondItem="mLq-tt-1zJ" secondAttribute="trailing" id="fwY-tF-c2a"/>
<constraint firstItem="2kZ-oH-jjl" firstAttribute="leading" secondItem="gFA-yv-8Ol" secondAttribute="trailing" id="gU3-bS-9be"/>
<constraint firstItem="Esv-Y3-Olm" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="gmc-iO-ygq"/>
<constraint firstItem="wFL-EP-4Yy" firstAttribute="top" secondItem="XM8-XW-Thc" secondAttribute="bottom" id="hEk-zG-H43"/>
<constraint firstItem="VgL-pC-APf" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="hdP-H1-akZ"/>
<constraint firstItem="uOW-rw-RDG" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="iD0-rP-7h9"/>
<constraint firstItem="V0G-fZ-ZJT" firstAttribute="top" secondItem="U4f-Vu-Ndd" secondAttribute="bottom" id="iDQ-S0-K9e"/>
<constraint firstItem="OZt-T0-7yr" firstAttribute="top" secondItem="PpH-bA-o5Z" secondAttribute="bottom" constant="5" id="imj-aC-nBc"/>
<constraint firstAttribute="trailing" secondItem="wFL-EP-4Yy" secondAttribute="trailing" id="jB1-JB-9Yd"/>
<constraint firstItem="yqS-gh-OfG" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="jPE-Pu-JLV"/>
<constraint firstItem="CbW-kY-rsi" firstAttribute="leading" secondItem="Esv-Y3-Olm" secondAttribute="trailing" id="jWg-BI-XQt"/>
<constraint firstAttribute="trailing" secondItem="OZt-T0-7yr" secondAttribute="trailing" id="kWi-SE-mwc"/>
<constraint firstItem="Esv-Y3-Olm" firstAttribute="leading" secondItem="VgL-pC-APf" secondAttribute="trailing" id="kYS-CW-w2a"/>
<constraint firstItem="IGk-yC-XZe" firstAttribute="top" secondItem="XM8-XW-Thc" secondAttribute="bottom" id="lxa-7o-MkJ"/>
<constraint firstItem="a2c-Z9-N83" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="mDe-jT-RBi"/>
<constraint firstItem="yqS-gh-OfG" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="mbT-24-Nzq"/>
<constraint firstItem="a2c-Z9-N83" firstAttribute="top" secondItem="yqS-gh-OfG" secondAttribute="bottom" constant="9" id="o0D-6O-EUW"/>
<constraint firstItem="yqS-gh-OfG" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" constant="10" id="mbT-24-Nzq"/>
<constraint firstItem="Omt-i6-epz" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="noy-6h-XEP"/>
<constraint firstItem="a2c-Z9-N83" firstAttribute="top" secondItem="yqS-gh-OfG" secondAttribute="bottom" constant="15" id="o0D-6O-EUW"/>
<constraint firstItem="a2c-Z9-N83" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" id="oER-5B-pPM"/>
<constraint firstItem="tfZ-qv-ibD" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="obK-bW-5WK"/>
<constraint firstItem="MIm-Gy-q67" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="p2p-6O-07q"/>
<constraint firstItem="tfZ-qv-ibD" firstAttribute="top" secondItem="VgL-pC-APf" secondAttribute="bottom" constant="8" id="sah-60-dX3"/>
<constraint firstItem="tfZ-qv-ibD" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="obK-bW-5WK"/>
<constraint firstItem="MIm-Gy-q67" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" constant="10" id="p2p-6O-07q"/>
<constraint firstItem="D1W-S3-C7a" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="pTd-JD-pZx"/>
<constraint firstItem="IGk-yC-XZe" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="qKs-CJ-57F"/>
<constraint firstItem="2kZ-oH-jjl" firstAttribute="top" secondItem="9aG-vP-PVQ" secondAttribute="bottom" constant="1" id="sQi-ax-S1h"/>
<constraint firstItem="tfZ-qv-ibD" firstAttribute="top" secondItem="VgL-pC-APf" secondAttribute="bottom" id="sah-60-dX3"/>
<constraint firstItem="5Yx-S5-XzQ" firstAttribute="top" secondItem="wFL-EP-4Yy" secondAttribute="bottom" constant="1" id="vB0-zy-jRG"/>
<constraint firstAttribute="bottom" secondItem="a2c-Z9-N83" secondAttribute="bottom" constant="1" id="vMI-oz-Y5b"/>
<constraint firstItem="V92-YJ-dNW" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="wMk-5J-aT7"/>
<constraint firstItem="yqS-gh-OfG" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" id="xKt-KI-vk9"/>
<constraint firstItem="V92-YJ-dNW" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="wMk-5J-aT7"/>
<constraint firstItem="yqS-gh-OfG" firstAttribute="width" secondItem="OIy-VZ-hKa" secondAttribute="width" multiplier="0.5" constant="-10" id="xKt-KI-vk9"/>
<constraint firstItem="D1W-S3-C7a" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="xez-Jm-nbk"/>
<constraint firstItem="a2c-Z9-N83" firstAttribute="top" secondItem="OZt-T0-7yr" secondAttribute="bottom" constant="3.5" id="yCJ-JN-2HK"/>
<constraint firstItem="AwP-om-AgF" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="yL7-vp-rtk"/>
<constraint firstItem="tfZ-qv-ibD" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="yLt-fr-98d"/>
<constraint firstItem="AwP-om-AgF" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="yL7-vp-rtk"/>
<constraint firstItem="tfZ-qv-ibD" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" id="yLt-fr-98d"/>
<constraint firstItem="OZt-T0-7yr" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="yyp-06-7cB"/>
<constraint firstItem="PpH-bA-o5Z" firstAttribute="leading" secondItem="OIy-VZ-hKa" secondAttribute="leading" id="zI5-Dv-B0m"/>
<constraint firstItem="a2c-Z9-N83" firstAttribute="height" secondItem="OIy-VZ-hKa" secondAttribute="height" multiplier="0.125" constant="-8" id="zav-jC-HYC"/>
</constraints>
</view>
@ -258,12 +384,16 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="mHd-ak-z0x" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="348" y="964.75"/>
<point key="canvasLocation" x="350" y="966"/>
</scene>
<!--View Controller Keyboard-->
<scene sceneID="L6e-QQ-dPq">
<objects>
<viewController id="wIq-rl-lQa" customClass="ViewControllerKeyboard" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="uUI-BQ-Lbn"/>
<viewControllerLayoutGuide type="bottom" id="Abv-VM-hod"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="DH6-yG-J33">
<rect key="frame" x="0.0" y="0.0" width="280" height="205"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
@ -271,7 +401,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="L43-9U-iwt">
<rect key="frame" x="5" y="5" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="A"/>
<state key="normal" title="A">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="bbY-dS-2Jl"/>
</connections>
@ -279,7 +411,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YEL-6f-WI6">
<rect key="frame" x="45" y="5" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="B"/>
<state key="normal" title="B">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="gNF-9x-YTe"/>
</connections>
@ -287,7 +421,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="iFQ-Wf-xsO">
<rect key="frame" x="85" y="5" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="C"/>
<state key="normal" title="C">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="WS2-Tv-UCP"/>
</connections>
@ -295,7 +431,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DDZ-C3-SFH">
<rect key="frame" x="125" y="5" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="D"/>
<state key="normal" title="D">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="IHJ-05-UU7"/>
</connections>
@ -303,7 +441,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qXM-CV-J5V">
<rect key="frame" x="165" y="5" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="E"/>
<state key="normal" title="E">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="Cah-fN-08L"/>
</connections>
@ -311,7 +451,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9Pr-TN-hqe">
<rect key="frame" x="205" y="5" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="F"/>
<state key="normal" title="F">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="m6N-xZ-jJ5"/>
</connections>
@ -319,7 +461,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pDr-Qu-eAR">
<rect key="frame" x="5" y="45" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="G"/>
<state key="normal" title="G">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="qqS-UF-CPI"/>
</connections>
@ -327,7 +471,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5mt-Cg-tlI">
<rect key="frame" x="45" y="45" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="H"/>
<state key="normal" title="H">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="QKN-o2-OBD"/>
</connections>
@ -335,7 +481,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sWj-WB-h4N">
<rect key="frame" x="85" y="45" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="I"/>
<state key="normal" title="I">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="1pH-CN-Bir"/>
</connections>
@ -343,7 +491,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="oIB-UI-P8x">
<rect key="frame" x="125" y="45" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="J"/>
<state key="normal" title="J">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="J1E-H4-WhE"/>
</connections>
@ -351,7 +501,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7no-2x-GLx">
<rect key="frame" x="165" y="45" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="K"/>
<state key="normal" title="K">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="i7r-eG-bUs"/>
</connections>
@ -359,7 +511,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AkD-iU-QME">
<rect key="frame" x="205" y="45" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="L"/>
<state key="normal" title="L">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="i9m-XM-3QB"/>
</connections>
@ -367,7 +521,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8dO-73-WQz">
<rect key="frame" x="5" y="85" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="M"/>
<state key="normal" title="M">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="4bu-Qt-aU7"/>
</connections>
@ -375,7 +531,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ehv-xo-Arq">
<rect key="frame" x="45" y="85" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="N"/>
<state key="normal" title="N">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="V0W-ju-92R"/>
</connections>
@ -383,7 +541,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="53Q-WV-hhX">
<rect key="frame" x="85" y="85" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="O"/>
<state key="normal" title="O">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="6Pi-7c-iaB"/>
</connections>
@ -391,7 +551,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="d4Z-VE-qFK">
<rect key="frame" x="125" y="85" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="P"/>
<state key="normal" title="P">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="LjI-b0-f16"/>
</connections>
@ -399,7 +561,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LBJ-ra-kSX">
<rect key="frame" x="165" y="85" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="Q"/>
<state key="normal" title="Q">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="L4a-fn-fMn"/>
</connections>
@ -407,7 +571,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nkK-Ff-4hA">
<rect key="frame" x="205" y="85" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="R"/>
<state key="normal" title="R">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="jjD-6C-mha"/>
</connections>
@ -415,7 +581,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7ep-ie-gDB">
<rect key="frame" x="5" y="125" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="S"/>
<state key="normal" title="S">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="yxy-Pk-hCk"/>
</connections>
@ -423,7 +591,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vJq-lP-wgB">
<rect key="frame" x="45" y="125" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="T"/>
<state key="normal" title="T">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="QEH-j7-xO1"/>
</connections>
@ -431,7 +601,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yjY-zM-EzK">
<rect key="frame" x="85" y="125" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="U"/>
<state key="normal" title="U">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="zMG-Xb-n7G"/>
</connections>
@ -439,7 +611,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Sub-og-chU">
<rect key="frame" x="125" y="125" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="V"/>
<state key="normal" title="V">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="xse-kZ-1rn"/>
</connections>
@ -447,7 +621,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aHu-Eb-Hc5">
<rect key="frame" x="165" y="125" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="W"/>
<state key="normal" title="W">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="qrv-pz-r21"/>
</connections>
@ -455,7 +631,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9i0-7h-hOP">
<rect key="frame" x="205" y="125" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="X"/>
<state key="normal" title="X">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="czo-tt-N1E"/>
</connections>
@ -463,7 +641,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YCY-jr-IYr">
<rect key="frame" x="5" y="165" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="Y"/>
<state key="normal" title="Y">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="imm-N4-Uj5"/>
</connections>
@ -471,7 +651,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dOY-Ia-nov">
<rect key="frame" x="45" y="165" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="Z"/>
<state key="normal" title="Z">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="RK1-Mv-d6c"/>
</connections>
@ -479,7 +661,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" restorationIdentifier="Clear" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dcd-XL-KiU">
<rect key="frame" x="125" y="165" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="CLR"/>
<state key="normal" title="CLR">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="bfd-zk-O1P"/>
</connections>
@ -487,7 +671,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" restorationIdentifier="Delete" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Gfk-9d-XbE">
<rect key="frame" x="165" y="165" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="DEL"/>
<state key="normal" title="DEL">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="Q2z-mP-ZvA"/>
</connections>
@ -495,7 +681,9 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" restorationIdentifier="Switch" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MMp-PQ-GAh">
<rect key="frame" x="205" y="165" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="NUM"/>
<state key="normal" title="NUM">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="fwk-gK-3Ix"/>
</connections>
@ -503,11 +691,46 @@
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" restorationIdentifier="Space" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aYs-Qk-sBt">
<rect key="frame" x="85" y="165" width="35" height="35"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="SP"/>
<state key="normal" title="SP">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="daf-EH-pVA"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" restorationIdentifier="Top" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0lj-UQ-1dw">
<rect key="frame" x="245" y="5" width="30" height="60"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<state key="normal">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="S9V-bE-eVK"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" restorationIdentifier="Mid" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1NW-Dg-Jpp">
<rect key="frame" x="245" y="71" width="30" height="63"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<state key="normal">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="qNs-as-7a4"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" restorationIdentifier="Bot" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xF3-bg-oXT">
<rect key="frame" x="245" y="140" width="30" height="60"/>
<color key="backgroundColor" red="0.019607843140000001" green="0.047058823530000002" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<state key="normal">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="KeyTaps:" destination="wIq-rl-lQa" eventType="touchDown" id="dk7-p9-68T"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="0.1846990740740741" alpha="1" colorSpace="calibratedWhite"/>
</view>
@ -542,6 +765,9 @@
<outletCollection property="Keys" destination="dcd-XL-KiU" id="PuK-f2-ifQ"/>
<outletCollection property="Keys" destination="Gfk-9d-XbE" id="f3h-8f-5qi"/>
<outletCollection property="Keys" destination="MMp-PQ-GAh" id="wol-bP-4oi"/>
<outletCollection property="Keys" destination="0lj-UQ-1dw" id="KPX-1h-bDs"/>
<outletCollection property="Keys" destination="1NW-Dg-Jpp" id="rRK-7w-KnG"/>
<outletCollection property="Keys" destination="xF3-bg-oXT" id="U2L-Pt-WrD"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="qgj-Sr-o0z" userLabel="First Responder" sceneMemberID="firstResponder"/>
@ -549,4 +775,8 @@
<point key="canvasLocation" x="-71" y="908.5"/>
</scene>
</scenes>
<resources>
<image name="tri" width="15" height="21"/>
<image name="triFlip" width="15" height="21"/>
</resources>
</document>

18
FMC Planner 2/Menu.plist Normal file
View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>Departure</string>
<string>Arrival</string>
<string>Aircraft</string>
<string></string>
<string></string>
<string></string>
<string></string>
<string></string>
<string></string>
<string></string>
<string></string>
<string></string>
</array>
</plist>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>PAYLOAD</string>
<string>ZFW</string>
<string>FUEL</string>
<string>GROSS WEIGHT</string>
<string></string>
<string></string>
<string>COST INDEX</string>
<string>FLIGHT LVL</string>
<string>TO FLAPS</string>
<string>V1</string>
<string>Vr</string>
<string>V2</string>
</array>
</plist>

18
FMC Planner 2/Route.plist Normal file
View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>VIA</string>
<string></string>
<string></string>
<string></string>
<string></string>
<string></string>
<string>TO</string>
<string></string>
<string></string>
<string></string>
<string></string>
<string></string>
</array>
</plist>

View File

@ -19,12 +19,16 @@
initWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I",
@"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R",
@"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", @"SP",
@"CLR", @"DEL", @"NUM", nil];
@"CLR", @"DEL", @"NUM", @"M\nE\nN\nU", @"P\nE\nR\nF",
@"R\nT\nE", nil];
_numeric = [[NSArray alloc]
initWithObjects:@"1", @"2", @"3", @"", @"", @"", @"4", @"5", @"6",
@"", @"", @"", @"7", @"8", @"9", @"", @"", @"",
@".", @"0", @"/", @"", @"", @"", @"", @"", @"SP",
@"CLR", @"DEL", @"LET", nil];
@"CLR", @"DEL", @"LET", @"M\nE\nN\nU", @"P\nE\nR\nF",
@"R\nT\nE", nil];
// Init Board
[self switchKeyboard];
// Round button corners
for (UIButton *but in _Keys) {
but.layer.cornerRadius = 5;
@ -48,6 +52,12 @@
}
} else if ([sender.restorationIdentifier isEqualToString:@"Delete"]) {
_main.screen.Scratchpad.text = @"DELETE";
} else if ([sender.restorationIdentifier isEqualToString:@"Top"]) {
[_main.screen loadScreen:@"Menu"];
} else if ([sender.restorationIdentifier isEqualToString:@"Mid"]) {
[_main.screen loadScreen:@"Perf Init"];
} else if ([sender.restorationIdentifier isEqualToString:@"Bot"]) {
[_main.screen loadScreen:@"Route"];
} else {
_main.screen.Scratchpad.text = [_main.screen.Scratchpad.text
stringByAppendingString:sender.titleLabel.text];
@ -57,12 +67,18 @@
- (void)switchKeyboard {
if (_alphaOn) {
for (int i = 0; i < _Keys.count; i++) {
((UIButton *)_Keys[i]).titleLabel.numberOfLines = 0;
((UIButton *)_Keys[i]).titleLabel.lineBreakMode =
NSLineBreakByCharWrapping;
[((UIButton *)_Keys[i]) setTitle:_alphabet[i]
forState:UIControlStateNormal];
[((UIButton *)_Keys[i]).titleLabel sizeToFit];
}
} else {
for (int i = 0; i < _Keys.count; i++) {
((UIButton *)_Keys[i]).titleLabel.numberOfLines = 0;
((UIButton *)_Keys[i]).titleLabel.lineBreakMode =
NSLineBreakByCharWrapping;
[((UIButton *)_Keys[i]) setTitle:_numeric[i]
forState:UIControlStateNormal];
[((UIButton *)_Keys[i]).titleLabel sizeToFit];

View File

@ -19,4 +19,6 @@
@property(strong, nonatomic) ViewController *main;
- (void)loadScreen:(NSString *)screenName;
@end

View File

@ -18,10 +18,8 @@
_Header.text = @"START";
_Scratchpad.text = @"";
// Tap gesture shit and fitToSize
// Tap gesture shit
for (UILabel *label in _LSK) {
label.font = [self findAdaptiveFontForUILabelSize:label.frame.size
withMinimumSize:21];
label.adjustsFontSizeToFitWidth = YES;
label.userInteractionEnabled = YES;
UITapGestureRecognizer *reg =
@ -31,11 +29,21 @@
[reg setNumberOfTouchesRequired:1];
[label addGestureRecognizer:reg];
}
}
- (void)viewDidAppear:(BOOL)animated {
[self loadScreen:@"Menu"];
}
- (void)viewDidLayoutSubviews {
// Size and LineBreak
_Header.font = [self findAdaptiveFontForUILabelSize:_Header.frame.size
withMinimumSize:21];
withMinimumSize:5
withMod:1];
_Header.adjustsFontSizeToFitWidth = YES;
_Scratchpad.font = [self findAdaptiveFontForUILabelSize:_Scratchpad.frame.size
withMinimumSize:21];
withMinimumSize:5
withMod:1];
_Scratchpad.adjustsFontSizeToFitWidth = YES;
}
@ -48,21 +56,59 @@
}
- (void)enterLSK:(UITapGestureRecognizer *)tapReg {
UILabel *label = ((UILabel *)tapReg.view);
BOOL append = false;
NSMutableAttributedString *attSOld = [label.attributedText mutableCopy];
NSRange rangeDesc = [[attSOld string]
rangeOfString:[[[attSOld string] componentsSeparatedByString:@"\n"]
firstObject]];
NSRange rangeEntry = [[attSOld string]
rangeOfString:[[[attSOld string] componentsSeparatedByString:@"\n"]
lastObject]];
append = rangeDesc.length + 1 == attSOld.length;
if ([_Scratchpad.text isEqualToString:@"DELETE"]) {
((UILabel *)tapReg.view).text = @"";
if (append) {
} else {
NSRange new = NSMakeRange(rangeDesc.length + 1, rangeEntry.length);
[attSOld replaceCharactersInRange:new withString:@""];
label.attributedText = attSOld;
}
} else {
((UILabel *)tapReg.view).text = _Scratchpad.text;
if (!append) {
[attSOld replaceCharactersInRange:NSMakeRange(rangeDesc.length + 1,
rangeEntry.length)
withString:_Scratchpad.text];
[attSOld
addAttribute:NSFontAttributeName
value:[self findAdaptiveFontForUILabelSize:label.frame.size
withMinimumSize:5
withMod:2]
range:NSMakeRange(rangeDesc.length + 1, rangeEntry.length)];
} else {
NSMutableAttributedString *attSNew =
[[NSMutableAttributedString alloc] initWithString:_Scratchpad.text];
[attSNew
addAttribute:NSFontAttributeName
value:[self findAdaptiveFontForUILabelSize:label.frame.size
withMinimumSize:5
withMod:2]
range:NSMakeRange(0, attSNew.length)];
[attSOld appendAttributedString:attSNew];
}
label.attributedText = attSOld;
}
_Scratchpad.text = @"";
}
- (UIFont *)findAdaptiveFontForUILabelSize:(CGSize)labelSize
withMinimumSize:(NSInteger)minSize {
withMinimumSize:(NSInteger)minSize
withMod:(float)mod {
UIFont *tempFont = nil;
NSString *testString =
@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSInteger tempMin = minSize;
NSInteger tempMin = minSize / mod;
NSInteger tempMax = 256;
NSInteger mid = 0;
NSInteger difference = 0;
@ -70,7 +116,13 @@
while (tempMin <= tempMax) {
mid = tempMin + (tempMax - tempMin) / 2;
tempFont = [UIFont systemFontOfSize:mid];
difference = labelSize.height - [testString sizeWithFont:tempFont].height;
difference =
labelSize.height / mod -
[testString
sizeWithAttributes:[NSDictionary
dictionaryWithObject:tempFont
forKey:NSFontAttributeName]]
.height;
if (mid == tempMin || mid == tempMax) {
if (difference < 0) {
@ -92,4 +144,23 @@
return [UIFont systemFontOfSize:mid];
}
- (void)loadScreen:(NSString *)screenName {
_Header.text = screenName;
NSArray *screen = [[NSArray alloc]
initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:screenName
ofType:@"plist"]];
for (int i = 0; i < _LSK.count; i++) {
NSMutableAttributedString *attS = [[NSMutableAttributedString alloc]
initWithString:[NSString stringWithFormat:@"%@\n", screen[i]]];
NSRange range = [[attS string] rangeOfString:screen[i]];
[attS addAttribute:NSFontAttributeName
value:[self findAdaptiveFontForUILabelSize:((UILabel *)_LSK[i])
.frame.size
withMinimumSize:5
withMod:2.5]
range:range];
((UILabel *)_LSK[i]).attributedText = attS;
}
}
@end