Skip to content
Snippets Groups Projects
Commit fd7dc229 authored by Nathan's avatar Nathan
Browse files

Add background menu and label

parent 1cfaeef0
No related branches found
No related tags found
No related merge requests found
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
BF3C48282A0A1FCD00CE128F /* PenduTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48272A0A1FCD00CE128F /* PenduTests.swift */; }; BF3C48282A0A1FCD00CE128F /* PenduTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48272A0A1FCD00CE128F /* PenduTests.swift */; };
BF3C48322A0A1FCD00CE128F /* PenduUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48312A0A1FCD00CE128F /* PenduUITests.swift */; }; BF3C48322A0A1FCD00CE128F /* PenduUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48312A0A1FCD00CE128F /* PenduUITests.swift */; };
BF3C48342A0A1FCD00CE128F /* PenduUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48332A0A1FCD00CE128F /* PenduUITestsLaunchTests.swift */; }; BF3C48342A0A1FCD00CE128F /* PenduUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48332A0A1FCD00CE128F /* PenduUITestsLaunchTests.swift */; };
F817CE902A13AD0C0078F0A5 /* ButtonTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F817CE8F2A13AD0C0078F0A5 /* ButtonTemplate.swift */; };
F817CE932A13B9DD0078F0A5 /* whatever it takes.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F817CE922A13B9DC0078F0A5 /* whatever it takes.ttf */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
...@@ -51,6 +53,8 @@ ...@@ -51,6 +53,8 @@
BF3C482D2A0A1FCD00CE128F /* PenduUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PenduUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; BF3C482D2A0A1FCD00CE128F /* PenduUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PenduUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
BF3C48312A0A1FCD00CE128F /* PenduUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenduUITests.swift; sourceTree = "<group>"; }; BF3C48312A0A1FCD00CE128F /* PenduUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenduUITests.swift; sourceTree = "<group>"; };
BF3C48332A0A1FCD00CE128F /* PenduUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenduUITestsLaunchTests.swift; sourceTree = "<group>"; }; BF3C48332A0A1FCD00CE128F /* PenduUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenduUITestsLaunchTests.swift; sourceTree = "<group>"; };
F817CE8F2A13AD0C0078F0A5 /* ButtonTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonTemplate.swift; sourceTree = "<group>"; };
F817CE922A13B9DC0078F0A5 /* whatever it takes.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "whatever it takes.ttf"; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
...@@ -101,9 +105,11 @@ ...@@ -101,9 +105,11 @@
BF3C480C2A0A1FCA00CE128F /* Pendu */ = { BF3C480C2A0A1FCA00CE128F /* Pendu */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
F817CE912A13B99F0078F0A5 /* Font */,
BF3C480D2A0A1FCA00CE128F /* AppDelegate.swift */, BF3C480D2A0A1FCA00CE128F /* AppDelegate.swift */,
BF3C480F2A0A1FCA00CE128F /* SceneDelegate.swift */, BF3C480F2A0A1FCA00CE128F /* SceneDelegate.swift */,
BF3C48112A0A1FCA00CE128F /* ViewController.swift */, BF3C48112A0A1FCA00CE128F /* ViewController.swift */,
F817CE8F2A13AD0C0078F0A5 /* ButtonTemplate.swift */,
BF3C48132A0A1FCA00CE128F /* Main.storyboard */, BF3C48132A0A1FCA00CE128F /* Main.storyboard */,
BF3C48192A0A1FCD00CE128F /* Assets.xcassets */, BF3C48192A0A1FCD00CE128F /* Assets.xcassets */,
BF3C481B2A0A1FCD00CE128F /* LaunchScreen.storyboard */, BF3C481B2A0A1FCD00CE128F /* LaunchScreen.storyboard */,
...@@ -130,6 +136,14 @@ ...@@ -130,6 +136,14 @@
path = PenduUITests; path = PenduUITests;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
F817CE912A13B99F0078F0A5 /* Font */ = {
isa = PBXGroup;
children = (
F817CE922A13B9DC0078F0A5 /* whatever it takes.ttf */,
);
path = Font;
sourceTree = "<group>";
};
/* End PBXGroup section */ /* End PBXGroup section */
/* Begin PBXNativeTarget section */ /* Begin PBXNativeTarget section */
...@@ -234,6 +248,7 @@ ...@@ -234,6 +248,7 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
F817CE932A13B9DD0078F0A5 /* whatever it takes.ttf in Resources */,
BF3C481D2A0A1FCD00CE128F /* LaunchScreen.storyboard in Resources */, BF3C481D2A0A1FCD00CE128F /* LaunchScreen.storyboard in Resources */,
BF3C481A2A0A1FCD00CE128F /* Assets.xcassets in Resources */, BF3C481A2A0A1FCD00CE128F /* Assets.xcassets in Resources */,
BF3C48152A0A1FCA00CE128F /* Main.storyboard in Resources */, BF3C48152A0A1FCA00CE128F /* Main.storyboard in Resources */,
...@@ -262,6 +277,7 @@ ...@@ -262,6 +277,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
BF3C48122A0A1FCA00CE128F /* ViewController.swift in Sources */, BF3C48122A0A1FCA00CE128F /* ViewController.swift in Sources */,
F817CE902A13AD0C0078F0A5 /* ButtonTemplate.swift in Sources */,
BF3C480E2A0A1FCA00CE128F /* AppDelegate.swift in Sources */, BF3C480E2A0A1FCA00CE128F /* AppDelegate.swift in Sources */,
BF3C48182A0A1FCA00CE128F /* Pendu.xcdatamodeld in Sources */, BF3C48182A0A1FCA00CE128F /* Pendu.xcdatamodeld in Sources */,
BF3C48102A0A1FCA00CE128F /* SceneDelegate.swift in Sources */, BF3C48102A0A1FCA00CE128F /* SceneDelegate.swift in Sources */,
......
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "background.jpeg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Pendu/Assets.xcassets/background.imageset/background.jpeg

35.3 KiB

Pendu/Assets.xcassets/background_table.jpeg

35.3 KiB

{
"images" : [
{
"filename" : "fond_acceuil.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Pendu/Assets.xcassets/fond_acceuil.imageset/fond_acceuil.png

206 KiB

...@@ -15,209 +15,6 @@ ...@@ -15,209 +15,6 @@
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/> <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nE9-qA-6Ix">
<rect key="frame" x="46" y="123" width="322" height="240"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Score : 0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="omq-me-gdF">
<rect key="frame" x="20" y="44" width="68" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="_ _ _ _ _ _ _ _ _ _ _ _ _" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SHg-wa-kcD">
<rect key="frame" x="46" y="379" width="322" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="73k-n4-YgZ">
<rect key="frame" x="46" y="495" width="34" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<size key="titleShadowOffset" width="3" height="0.0"/>
<state key="normal" title="A"/>
<buttonConfiguration key="configuration" style="gray" title="A" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kLf-mA-bVg">
<rect key="frame" x="88" y="495" width="34" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="Z" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3bJ-N7-jgc">
<rect key="frame" x="129" y="495" width="33" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="E" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tf9-qw-Ven">
<rect key="frame" x="170" y="495" width="33" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="R" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Zzu-Qc-ZJt">
<rect key="frame" x="211" y="495" width="33" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="T" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7mU-Zt-6vv">
<rect key="frame" x="252" y="495" width="34" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="Y" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ewS-Cp-Lc7">
<rect key="frame" x="292" y="495" width="35" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="U" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="12E-IQ-Zaw">
<rect key="frame" x="333" y="495" width="35" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="I" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="KOj-Ug-mgS">
<rect key="frame" x="46" y="534" width="35" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="O" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fJQ-Ci-VQW">
<rect key="frame" x="89" y="534" width="33" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="P" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Lnb-WI-YDQ">
<rect key="frame" x="128" y="534" width="35" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="Q" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FJ2-8A-DHW">
<rect key="frame" x="170" y="534" width="33" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="S" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kTY-bf-pBH">
<rect key="frame" x="210" y="534" width="35" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="D" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="21I-AF-jfk">
<rect key="frame" x="253" y="534" width="32" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="F" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="QsT-ik-ztz">
<rect key="frame" x="292" y="534" width="35" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="G" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Qnt-oJ-lQO">
<rect key="frame" x="333" y="534" width="35" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="H" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xIc-ue-yHu">
<rect key="frame" x="46" y="573" width="34" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="J" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NX7-3R-sMa">
<rect key="frame" x="88" y="573" width="34" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="K" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Vx5-qI-Z67">
<rect key="frame" x="130" y="573" width="32" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="L" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Aaq-nt-wFp">
<rect key="frame" x="168" y="573" width="35" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="M" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZvI-jr-ghu">
<rect key="frame" x="210" y="573" width="38" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="W" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="frz-93-VjS">
<rect key="frame" x="252" y="573" width="34" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="X" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zLJ-5e-n9t">
<rect key="frame" x="293" y="573" width="34" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="C" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="H4a-DO-d5B">
<rect key="frame" x="334" y="573" width="34" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="V" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mVi-4h-g5o">
<rect key="frame" x="168" y="612" width="35" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="B" subtitle=""/>
</button>
<button opaque="NO" contentMode="scaleAspectFill" semanticContentAttribute="spatial" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ti9-Io-1RF">
<rect key="frame" x="210" y="612" width="37" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<size key="titleShadowOffset" width="2" height="0.0"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="N" subtitle=""/>
</button>
</subviews>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/>
</view> </view>
...@@ -226,7 +23,7 @@ ...@@ -226,7 +23,7 @@
</viewController> </viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects> </objects>
<point key="canvasLocation" x="28.985507246376812" y="83.705357142857139"/> <point key="canvasLocation" x="322" y="106"/>
</scene> </scene>
</scenes> </scenes>
<resources> <resources>
......
import UIKit
struct ButtonTemplateViewModel {
let primaryColor: String
}
final class ButtonTemplate: UIButton {
private let primaryLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 1
label.textAlignment = .center
label.textColor = .white
label.font = .systemFont(ofSize: 20, weight: .semibold)
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(primaryLabel)
clipsToBounds = true
layer.cornerRadius = 8
layer.borderWidth = 1
layer.borderColor = UIColor.secondarySystemBackground.cgColor
backgroundColor = .systemGreen
}
required init?(coder: NSCoder) {
fatalError()
}
func configure(with viewModel: ButtonTemplateViewModel) {
primaryLabel.text = viewModel.primaryColor
}
override func layoutSubviews() {
super.layoutSubviews()
primaryLabel.frame = CGRect(x: 0, y: 5, width: frame.size.width, height: frame.size.height/2)
}
}
File added
...@@ -21,5 +21,9 @@ ...@@ -21,5 +21,9 @@
</array> </array>
</dict> </dict>
</dict> </dict>
<key>UIAppFonts</key>
<array>
<string>whatever it takes.ttf</string>
</array>
</dict> </dict>
</plist> </plist>
...@@ -7,11 +7,47 @@ ...@@ -7,11 +7,47 @@
import UIKit import UIKit
extension UIView {
func addBackground(imageName: String = "fond_acceuil.png", contentMode: UIView.ContentMode = .scaleToFill) {
// setup the UIImageView
let backgroundImageView = UIImageView(frame: UIScreen.main.bounds)
backgroundImageView.image = UIImage(named: imageName)
backgroundImageView.contentMode = contentMode
backgroundImageView.translatesAutoresizingMaskIntoConstraints = false
addSubview(backgroundImageView)
sendSubviewToBack(backgroundImageView)
// adding NSLayoutConstraints
let leadingConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0.0)
let trailingConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0.0)
let topConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0.0)
let bottomConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0.0)
NSLayoutConstraint.activate([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint])
}
}
class ViewController: UIViewController { class ViewController: UIViewController {
override func viewDidLoad() { override func viewDidLoad() {
view.addBackground()
super.viewDidLoad() super.viewDidLoad()
// Do any additional setup after loading the view.
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 40))
label.center = CGPoint(x: 160, y: 230)
label.font = UIFont(name: "whatever it takes", size: 40)
label.textAlignment = .center
label.textColor = UIColor.white
label.text = "Pendu"
self.view.addSubview(label)
//
// let ButtonLetter = ButtonTemplate(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
// view.addSubview(ButtonLetter)
// ButtonLetter.center = view.center
// ButtonLetter.configure(with: ButtonTemplateViewModel(primaryColor: "A"))
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment