Showing
4 changed files
with
274 additions
and
24 deletions
No preview for this file type
| ... | @@ -2302,8 +2302,12 @@ | ... | @@ -2302,8 +2302,12 @@ |
| 2302 | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8dQ-SF-Z4E"> | 2302 | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8dQ-SF-Z4E"> |
| 2303 | <rect key="frame" x="0.0" y="44" width="414" height="852"/> | 2303 | <rect key="frame" x="0.0" y="44" width="414" height="852"/> |
| 2304 | <subviews> | 2304 | <subviews> |
| 2305 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="coupons_scrollview_white" translatesAutoresizingMaskIntoConstraints="NO" id="6ch-LK-yKY"> | ||
| 2306 | + <rect key="frame" x="0.0" y="0.0" width="414" height="852"/> | ||
| 2307 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | ||
| 2308 | + </imageView> | ||
| 2305 | <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" ambiguous="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AUR-1f-OXi"> | 2309 | <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" ambiguous="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AUR-1f-OXi"> |
| 2306 | - <rect key="frame" x="0.0" y="5" width="414" height="847"/> | 2310 | + <rect key="frame" x="0.0" y="2" width="414" height="850"/> |
| 2307 | <subviews> | 2311 | <subviews> |
| 2308 | <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YmP-9y-EV0"> | 2312 | <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YmP-9y-EV0"> |
| 2309 | <rect key="frame" x="0.0" y="0.0" width="414" height="852"/> | 2313 | <rect key="frame" x="0.0" y="0.0" width="414" height="852"/> |
| ... | @@ -2314,22 +2318,73 @@ | ... | @@ -2314,22 +2318,73 @@ |
| 2314 | <constraint firstAttribute="height" constant="200" id="v6r-oa-0XG"/> | 2318 | <constraint firstAttribute="height" constant="200" id="v6r-oa-0XG"/> |
| 2315 | </constraints> | 2319 | </constraints> |
| 2316 | </imageView> | 2320 | </imageView> |
| 2321 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7La-Zf-BX7"> | ||
| 2322 | + <rect key="frame" x="20" y="220" width="70" height="70"/> | ||
| 2323 | + <subviews> | ||
| 2324 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="G7w-Tk-Yfm"> | ||
| 2325 | + <rect key="frame" x="10" y="25.5" width="50" height="19"/> | ||
| 2326 | + <fontDescription key="fontDescription" name="PFSquareSansPro-Medium" family="PF Square Sans Pro" pointSize="19"/> | ||
| 2327 | + <color key="textColor" red="0.13333333333333333" green="0.66274509803921566" blue="0.70980392156862748" alpha="1" colorSpace="calibratedRGB"/> | ||
| 2328 | + <nil key="highlightedColor"/> | ||
| 2329 | + </label> | ||
| 2330 | + </subviews> | ||
| 2331 | + <color key="backgroundColor" systemColor="systemBackgroundColor"/> | ||
| 2332 | + <constraints> | ||
| 2333 | + <constraint firstAttribute="width" constant="70" id="3Uf-5S-KdI"/> | ||
| 2334 | + <constraint firstItem="G7w-Tk-Yfm" firstAttribute="leading" secondItem="7La-Zf-BX7" secondAttribute="leading" constant="10" id="DA1-Un-P7Y"/> | ||
| 2335 | + <constraint firstAttribute="height" constant="70" id="DIq-bh-Xza"/> | ||
| 2336 | + <constraint firstItem="G7w-Tk-Yfm" firstAttribute="centerY" secondItem="7La-Zf-BX7" secondAttribute="centerY" id="Gcm-sd-oIm"/> | ||
| 2337 | + <constraint firstItem="G7w-Tk-Yfm" firstAttribute="centerX" secondItem="7La-Zf-BX7" secondAttribute="centerX" id="HAp-Mg-ZHE"/> | ||
| 2338 | + <constraint firstAttribute="trailing" secondItem="G7w-Tk-Yfm" secondAttribute="trailing" constant="10" id="L9Q-bb-P3G"/> | ||
| 2339 | + </constraints> | ||
| 2340 | + </view> | ||
| 2341 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yXI-Ds-V0T"> | ||
| 2342 | + <rect key="frame" x="100" y="247.5" width="294" height="15"/> | ||
| 2343 | + <fontDescription key="fontDescription" name="PFSquareSansPro-Regular" family="PF Square Sans Pro" pointSize="15"/> | ||
| 2344 | + <color key="textColor" red="0.25490196078431371" green="0.33333333333333331" blue="0.39215686274509803" alpha="1" colorSpace="calibratedRGB"/> | ||
| 2345 | + <nil key="highlightedColor"/> | ||
| 2346 | + </label> | ||
| 2347 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7Bc-ly-ehN"> | ||
| 2348 | + <rect key="frame" x="0.0" y="323" width="414" height="2"/> | ||
| 2349 | + <color key="backgroundColor" systemColor="systemBackgroundColor"/> | ||
| 2350 | + <constraints> | ||
| 2351 | + <constraint firstAttribute="height" constant="2" id="sgv-gT-iEr"/> | ||
| 2352 | + </constraints> | ||
| 2353 | + </view> | ||
| 2354 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xfg-Zl-DTT"> | ||
| 2355 | + <rect key="frame" x="180.5" y="310" width="53.5" height="28"/> | ||
| 2356 | + <subviews> | ||
| 2357 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vZf-KA-Yki"> | ||
| 2358 | + <rect key="frame" x="10" y="8" width="33.5" height="15"/> | ||
| 2359 | + <fontDescription key="fontDescription" name="PFSquareSansPro-Regular" family="PF Square Sans Pro" pointSize="15"/> | ||
| 2360 | + <color key="textColor" red="0.25490196079999999" green="0.33333333329999998" blue="0.3921568627" alpha="1" colorSpace="calibratedRGB"/> | ||
| 2361 | + <nil key="highlightedColor"/> | ||
| 2362 | + </label> | ||
| 2363 | + </subviews> | ||
| 2364 | + <color key="backgroundColor" systemColor="systemBackgroundColor"/> | ||
| 2365 | + <constraints> | ||
| 2366 | + <constraint firstAttribute="trailing" secondItem="vZf-KA-Yki" secondAttribute="trailing" constant="10" id="EK6-Mv-bxD"/> | ||
| 2367 | + <constraint firstItem="vZf-KA-Yki" firstAttribute="top" secondItem="Xfg-Zl-DTT" secondAttribute="top" constant="8" id="KXe-Oo-bS1"/> | ||
| 2368 | + <constraint firstAttribute="bottom" secondItem="vZf-KA-Yki" secondAttribute="bottom" constant="5" id="tjQ-ut-cqy"/> | ||
| 2369 | + <constraint firstItem="vZf-KA-Yki" firstAttribute="leading" secondItem="Xfg-Zl-DTT" secondAttribute="leading" constant="10" id="tzo-nt-cTZ"/> | ||
| 2370 | + </constraints> | ||
| 2371 | + </view> | ||
| 2317 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="title" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XJ0-lK-2fk"> | 2372 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="title" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XJ0-lK-2fk"> |
| 2318 | - <rect key="frame" x="20" y="230" width="374" height="17"/> | 2373 | + <rect key="frame" x="20" y="368" width="374" height="17"/> |
| 2319 | - <fontDescription key="fontDescription" name="PFSquareSansPro-Medium" family="PF Square Sans Pro" pointSize="17"/> | 2374 | + <fontDescription key="fontDescription" name="PFSquareSansPro-Regular" family="PF Square Sans Pro" pointSize="17"/> |
| 2320 | <color key="textColor" red="0.25490196079999999" green="0.33333333329999998" blue="0.3921568627" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> | 2375 | <color key="textColor" red="0.25490196079999999" green="0.33333333329999998" blue="0.3921568627" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> |
| 2321 | <nil key="highlightedColor"/> | 2376 | <nil key="highlightedColor"/> |
| 2322 | </label> | 2377 | </label> |
| 2323 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="description" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Toi-hN-Bn7"> | 2378 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="description" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Toi-hN-Bn7"> |
| 2324 | - <rect key="frame" x="20" y="272" width="374" height="17"/> | 2379 | + <rect key="frame" x="20" y="410" width="374" height="17"/> |
| 2325 | <fontDescription key="fontDescription" name="PFSquareSansPro-Regular" family="PF Square Sans Pro" pointSize="17"/> | 2380 | <fontDescription key="fontDescription" name="PFSquareSansPro-Regular" family="PF Square Sans Pro" pointSize="17"/> |
| 2326 | <color key="textColor" red="0.25490196079999999" green="0.33333333329999998" blue="0.3921568627" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> | 2381 | <color key="textColor" red="0.25490196079999999" green="0.33333333329999998" blue="0.3921568627" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> |
| 2327 | <nil key="highlightedColor"/> | 2382 | <nil key="highlightedColor"/> |
| 2328 | </label> | 2383 | </label> |
| 2329 | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uDO-0Z-xFa"> | 2384 | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uDO-0Z-xFa"> |
| 2330 | - <rect key="frame" x="83" y="389" width="248" height="50"/> | 2385 | + <rect key="frame" x="83" y="445" width="248" height="40"/> |
| 2331 | <constraints> | 2386 | <constraints> |
| 2332 | - <constraint firstAttribute="height" constant="50" id="Mve-Wm-jeX"/> | 2387 | + <constraint firstAttribute="height" constant="40" id="Mve-Wm-jeX"/> |
| 2333 | </constraints> | 2388 | </constraints> |
| 2334 | <fontDescription key="fontDescription" name="PFSquareSansPro-Medium" family="PF Square Sans Pro" pointSize="16"/> | 2389 | <fontDescription key="fontDescription" name="PFSquareSansPro-Medium" family="PF Square Sans Pro" pointSize="16"/> |
| 2335 | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> | 2390 | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| ... | @@ -2337,25 +2392,73 @@ | ... | @@ -2337,25 +2392,73 @@ |
| 2337 | <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | 2392 | <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| 2338 | </state> | 2393 | </state> |
| 2339 | <connections> | 2394 | <connections> |
| 2340 | - <action selector="activateButtomAction:" destination="lMR-D4-SOW" eventType="touchUpInside" id="emx-wy-PeW"/> | 2395 | + <action selector="activateButtomAction:" destination="lMR-D4-SOW" eventType="touchUpInside" id="Pab-FA-qhu"/> |
| 2341 | </connections> | 2396 | </connections> |
| 2342 | </button> | 2397 | </button> |
| 2398 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ulI-Td-g6v"> | ||
| 2399 | + <rect key="frame" x="103.5" y="495" width="207" height="40"/> | ||
| 2400 | + <constraints> | ||
| 2401 | + <constraint firstAttribute="height" constant="40" id="72j-BL-Ejm"/> | ||
| 2402 | + </constraints> | ||
| 2403 | + <fontDescription key="fontDescription" name="PFSquareSansPro-Regular" family="PF Square Sans Pro" pointSize="16"/> | ||
| 2404 | + <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="5" maxY="0.0"/> | ||
| 2405 | + <state key="normal" title="Δες Περισσότερα" image="ic_down_dark"> | ||
| 2406 | + <color key="titleColor" red="0.25490196079999999" green="0.33333333329999998" blue="0.3921568627" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> | ||
| 2407 | + <preferredSymbolConfiguration key="preferredSymbolConfiguration"/> | ||
| 2408 | + </state> | ||
| 2409 | + <connections> | ||
| 2410 | + <action selector="moreButtonAction:" destination="lMR-D4-SOW" eventType="touchUpInside" id="xW0-ds-4xL"/> | ||
| 2411 | + </connections> | ||
| 2412 | + </button> | ||
| 2413 | + <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mCl-kM-ssj"> | ||
| 2414 | + <rect key="frame" x="20" y="545" width="374" height="0.0"/> | ||
| 2415 | + <color key="backgroundColor" systemColor="systemBackgroundColor"/> | ||
| 2416 | + <constraints> | ||
| 2417 | + <constraint firstAttribute="height" id="Uys-zo-ERe"/> | ||
| 2418 | + </constraints> | ||
| 2419 | + <color key="textColor" red="0.25490196079999999" green="0.33333333329999998" blue="0.3921568627" alpha="1" colorSpace="calibratedRGB"/> | ||
| 2420 | + <fontDescription key="fontDescription" name="PFSquareSansPro-Regular" family="PF Square Sans Pro" pointSize="13"/> | ||
| 2421 | + <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/> | ||
| 2422 | + </textView> | ||
| 2343 | </subviews> | 2423 | </subviews> |
| 2344 | <color key="backgroundColor" systemColor="systemBackgroundColor"/> | 2424 | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| 2345 | <constraints> | 2425 | <constraints> |
| 2426 | + <constraint firstItem="Xfg-Zl-DTT" firstAttribute="centerX" secondItem="YmP-9y-EV0" secondAttribute="centerX" id="1RR-zs-8XM"/> | ||
| 2346 | <constraint firstItem="QlP-ct-u6O" firstAttribute="top" secondItem="YmP-9y-EV0" secondAttribute="top" id="2z7-Gk-jiP"/> | 2427 | <constraint firstItem="QlP-ct-u6O" firstAttribute="top" secondItem="YmP-9y-EV0" secondAttribute="top" id="2z7-Gk-jiP"/> |
| 2347 | <constraint firstItem="uDO-0Z-xFa" firstAttribute="centerX" secondItem="YmP-9y-EV0" secondAttribute="centerX" id="3jp-jm-qXu"/> | 2428 | <constraint firstItem="uDO-0Z-xFa" firstAttribute="centerX" secondItem="YmP-9y-EV0" secondAttribute="centerX" id="3jp-jm-qXu"/> |
| 2429 | + <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="ulI-Td-g6v" secondAttribute="bottom" constant="30" id="53n-kr-Q6B"/> | ||
| 2430 | + <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="mCl-kM-ssj" secondAttribute="bottom" constant="30" id="5nq-P2-bOH"/> | ||
| 2431 | + <constraint firstAttribute="trailing" secondItem="7Bc-ly-ehN" secondAttribute="trailing" id="7VM-tt-jqT"/> | ||
| 2432 | + <constraint firstItem="Xfg-Zl-DTT" firstAttribute="top" secondItem="7La-Zf-BX7" secondAttribute="bottom" constant="20" id="9sp-tg-Dk7"/> | ||
| 2348 | <constraint firstItem="Toi-hN-Bn7" firstAttribute="top" secondItem="XJ0-lK-2fk" secondAttribute="bottom" constant="25" id="A5L-XB-0ef"/> | 2433 | <constraint firstItem="Toi-hN-Bn7" firstAttribute="top" secondItem="XJ0-lK-2fk" secondAttribute="bottom" constant="25" id="A5L-XB-0ef"/> |
| 2349 | <constraint firstAttribute="trailing" secondItem="QlP-ct-u6O" secondAttribute="trailing" id="Bv6-ZV-dmS"/> | 2434 | <constraint firstAttribute="trailing" secondItem="QlP-ct-u6O" secondAttribute="trailing" id="Bv6-ZV-dmS"/> |
| 2350 | - <constraint firstItem="XJ0-lK-2fk" firstAttribute="top" secondItem="QlP-ct-u6O" secondAttribute="bottom" constant="30" id="QVa-2f-1RG"/> | 2435 | + <constraint firstAttribute="trailing" secondItem="yXI-Ds-V0T" secondAttribute="trailing" constant="20" id="HrW-ZG-fgo"/> |
| 2436 | + <constraint firstAttribute="trailing" secondItem="mCl-kM-ssj" secondAttribute="trailing" constant="20" id="IT9-b1-n1C"/> | ||
| 2437 | + <constraint firstItem="mCl-kM-ssj" firstAttribute="leading" secondItem="YmP-9y-EV0" secondAttribute="leading" constant="20" id="KKR-28-Uov"/> | ||
| 2438 | + <constraint firstItem="yXI-Ds-V0T" firstAttribute="centerY" secondItem="7La-Zf-BX7" secondAttribute="centerY" id="NPi-C7-6J9"/> | ||
| 2439 | + <constraint firstItem="7La-Zf-BX7" firstAttribute="top" secondItem="QlP-ct-u6O" secondAttribute="bottom" constant="20" id="NiY-9G-88D"/> | ||
| 2440 | + <constraint firstItem="XJ0-lK-2fk" firstAttribute="top" secondItem="Xfg-Zl-DTT" secondAttribute="bottom" constant="30" id="QVa-2f-1RG"/> | ||
| 2441 | + <constraint firstItem="ulI-Td-g6v" firstAttribute="centerX" secondItem="YmP-9y-EV0" secondAttribute="centerX" id="VwY-kf-7fU"/> | ||
| 2442 | + <constraint firstItem="mCl-kM-ssj" firstAttribute="top" secondItem="ulI-Td-g6v" secondAttribute="bottom" constant="10" id="Yel-xv-ent"/> | ||
| 2351 | <constraint firstAttribute="trailing" secondItem="XJ0-lK-2fk" secondAttribute="trailing" constant="20" id="cco-tR-YlH"/> | 2443 | <constraint firstAttribute="trailing" secondItem="XJ0-lK-2fk" secondAttribute="trailing" constant="20" id="cco-tR-YlH"/> |
| 2444 | + <constraint firstItem="7Bc-ly-ehN" firstAttribute="leading" secondItem="YmP-9y-EV0" secondAttribute="leading" id="jgD-2r-FeR"/> | ||
| 2445 | + <constraint firstItem="ulI-Td-g6v" firstAttribute="width" secondItem="YmP-9y-EV0" secondAttribute="width" multiplier="0.5" id="lT3-Qx-qTs"/> | ||
| 2352 | <constraint firstItem="uDO-0Z-xFa" firstAttribute="width" secondItem="YmP-9y-EV0" secondAttribute="width" multiplier="0.6" id="mxO-XZ-O4t"/> | 2446 | <constraint firstItem="uDO-0Z-xFa" firstAttribute="width" secondItem="YmP-9y-EV0" secondAttribute="width" multiplier="0.6" id="mxO-XZ-O4t"/> |
| 2353 | - <constraint firstItem="uDO-0Z-xFa" firstAttribute="top" secondItem="Toi-hN-Bn7" secondAttribute="bottom" constant="100" id="oRo-i8-goh"/> | 2447 | + <constraint firstItem="uDO-0Z-xFa" firstAttribute="top" secondItem="XJ0-lK-2fk" secondAttribute="bottom" constant="60" id="oRo-i8-goh"/> |
| 2354 | <constraint firstItem="XJ0-lK-2fk" firstAttribute="leading" secondItem="YmP-9y-EV0" secondAttribute="leading" constant="20" id="olo-Ei-uC2"/> | 2448 | <constraint firstItem="XJ0-lK-2fk" firstAttribute="leading" secondItem="YmP-9y-EV0" secondAttribute="leading" constant="20" id="olo-Ei-uC2"/> |
| 2355 | <constraint firstItem="QlP-ct-u6O" firstAttribute="leading" secondItem="YmP-9y-EV0" secondAttribute="leading" id="pwh-Uf-942"/> | 2449 | <constraint firstItem="QlP-ct-u6O" firstAttribute="leading" secondItem="YmP-9y-EV0" secondAttribute="leading" id="pwh-Uf-942"/> |
| 2356 | <constraint firstAttribute="trailing" secondItem="Toi-hN-Bn7" secondAttribute="trailing" constant="20" id="rV1-Mg-rhg"/> | 2450 | <constraint firstAttribute="trailing" secondItem="Toi-hN-Bn7" secondAttribute="trailing" constant="20" id="rV1-Mg-rhg"/> |
| 2451 | + <constraint firstItem="ulI-Td-g6v" firstAttribute="top" secondItem="uDO-0Z-xFa" secondAttribute="bottom" constant="10" id="tfm-M4-2Ib"/> | ||
| 2452 | + <constraint firstItem="7La-Zf-BX7" firstAttribute="leading" secondItem="YmP-9y-EV0" secondAttribute="leading" constant="20" id="uzz-Wx-LMR"/> | ||
| 2453 | + <constraint firstItem="yXI-Ds-V0T" firstAttribute="leading" secondItem="7La-Zf-BX7" secondAttribute="trailing" constant="10" id="wV4-sO-FWF"/> | ||
| 2454 | + <constraint firstItem="7Bc-ly-ehN" firstAttribute="centerY" secondItem="Xfg-Zl-DTT" secondAttribute="centerY" id="x3N-iw-dch"/> | ||
| 2357 | <constraint firstItem="Toi-hN-Bn7" firstAttribute="leading" secondItem="YmP-9y-EV0" secondAttribute="leading" constant="20" id="xyt-Bc-HTA"/> | 2455 | <constraint firstItem="Toi-hN-Bn7" firstAttribute="leading" secondItem="YmP-9y-EV0" secondAttribute="leading" constant="20" id="xyt-Bc-HTA"/> |
| 2358 | </constraints> | 2456 | </constraints> |
| 2457 | + <variation key="default"> | ||
| 2458 | + <mask key="subviews"> | ||
| 2459 | + <exclude reference="Toi-hN-Bn7"/> | ||
| 2460 | + </mask> | ||
| 2461 | + </variation> | ||
| 2359 | </view> | 2462 | </view> |
| 2360 | </subviews> | 2463 | </subviews> |
| 2361 | <constraints> | 2464 | <constraints> |
| ... | @@ -2389,14 +2492,23 @@ | ... | @@ -2389,14 +2492,23 @@ |
| 2389 | </constraints> | 2492 | </constraints> |
| 2390 | </view> | 2493 | </view> |
| 2391 | <connections> | 2494 | <connections> |
| 2392 | - <outlet property="activateButton" destination="uDO-0Z-xFa" id="7rK-iU-AKD"/> | 2495 | + <outlet property="activateButton" destination="uDO-0Z-xFa" id="EkA-Ab-l2x"/> |
| 2393 | - <outlet property="descriptionLabel" destination="Toi-hN-Bn7" id="ayJ-bz-oz1"/> | 2496 | + <outlet property="backgroundImage" destination="6ch-LK-yKY" id="g0Y-mW-Lxv"/> |
| 2394 | - <outlet property="heroImage" destination="QlP-ct-u6O" id="CEs-7T-KP7"/> | 2497 | + <outlet property="borderLineView" destination="7Bc-ly-ehN" id="JFL-gS-QxZ"/> |
| 2395 | - <outlet property="heroImageHeight" destination="v6r-oa-0XG" id="4wy-UN-qYB"/> | 2498 | + <outlet property="descriptionLabel" destination="Toi-hN-Bn7" id="fMC-DH-36z"/> |
| 2396 | - <outlet property="mainView" destination="8dQ-SF-Z4E" id="gUh-1a-Msg"/> | 2499 | + <outlet property="giftDurationLabel" destination="vZf-KA-Yki" id="8DW-bF-Ryx"/> |
| 2397 | - <outlet property="nameLabel" destination="XJ0-lK-2fk" id="67q-Es-R6T"/> | 2500 | + <outlet property="giftDurationView" destination="Xfg-Zl-DTT" id="gAy-uL-zN7"/> |
| 2398 | - <outlet property="scrollContentView" destination="YmP-9y-EV0" id="rax-VX-dO0"/> | 2501 | + <outlet property="giftTypeLabel" destination="yXI-Ds-V0T" id="ux6-O8-GPe"/> |
| 2399 | - <outlet property="scrollView" destination="AUR-1f-OXi" id="ZEZ-CZ-8og"/> | 2502 | + <outlet property="heroImage" destination="QlP-ct-u6O" id="lCm-UF-0Sy"/> |
| 2503 | + <outlet property="heroImageHeight" destination="v6r-oa-0XG" id="3Mg-z2-ETz"/> | ||
| 2504 | + <outlet property="moreButton" destination="ulI-Td-g6v" id="4Xj-S3-FzE"/> | ||
| 2505 | + <outlet property="moreTextView" destination="mCl-kM-ssj" id="cC6-pL-jqp"/> | ||
| 2506 | + <outlet property="moreTextViewHeight" destination="Uys-zo-ERe" id="W9H-V2-oOm"/> | ||
| 2507 | + <outlet property="nameLabel" destination="XJ0-lK-2fk" id="tL4-Ay-gb9"/> | ||
| 2508 | + <outlet property="scrollContentView" destination="YmP-9y-EV0" id="PLV-e9-qOd"/> | ||
| 2509 | + <outlet property="scrollView" destination="AUR-1f-OXi" id="u5N-8L-BVU"/> | ||
| 2510 | + <outlet property="valueLabel" destination="G7w-Tk-Yfm" id="9oX-f1-xS4"/> | ||
| 2511 | + <outlet property="valueView" destination="7La-Zf-BX7" id="Jeq-bO-HrK"/> | ||
| 2400 | </connections> | 2512 | </connections> |
| 2401 | </viewController> | 2513 | </viewController> |
| 2402 | <placeholder placeholderIdentifier="IBFirstResponder" id="UAL-zF-u8I" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> | 2514 | <placeholder placeholderIdentifier="IBFirstResponder" id="UAL-zF-u8I" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> | ... | ... |
| ... | @@ -9,6 +9,7 @@ import UIKit | ... | @@ -9,6 +9,7 @@ import UIKit |
| 9 | 9 | ||
| 10 | @objc public class TelcoViewController: UIViewController, UIPopoverControllerDelegate { | 10 | @objc public class TelcoViewController: UIViewController, UIPopoverControllerDelegate { |
| 11 | @IBOutlet weak var mainView: UIView! | 11 | @IBOutlet weak var mainView: UIView! |
| 12 | + @IBOutlet weak var backgroundImage: UIImageView! | ||
| 12 | @IBOutlet weak var scrollView: UIScrollView! | 13 | @IBOutlet weak var scrollView: UIScrollView! |
| 13 | @IBOutlet weak var scrollContentView: UIView! | 14 | @IBOutlet weak var scrollContentView: UIView! |
| 14 | @IBOutlet weak var heroImage: UIImageView! | 15 | @IBOutlet weak var heroImage: UIImageView! |
| ... | @@ -16,6 +17,15 @@ import UIKit | ... | @@ -16,6 +17,15 @@ import UIKit |
| 16 | @IBOutlet weak var nameLabel: UILabel! | 17 | @IBOutlet weak var nameLabel: UILabel! |
| 17 | @IBOutlet weak var descriptionLabel: UILabel! | 18 | @IBOutlet weak var descriptionLabel: UILabel! |
| 18 | @IBOutlet weak var activateButton: UIButton! | 19 | @IBOutlet weak var activateButton: UIButton! |
| 20 | + @IBOutlet weak var valueView: UIView! | ||
| 21 | + @IBOutlet weak var valueLabel: UILabel! | ||
| 22 | + @IBOutlet weak var giftTypeLabel: UILabel! | ||
| 23 | + @IBOutlet weak var giftDurationView: UIView! | ||
| 24 | + @IBOutlet weak var giftDurationLabel: UILabel! | ||
| 25 | + @IBOutlet weak var borderLineView: UIView! | ||
| 26 | + @IBOutlet weak var moreButton: UIButton! | ||
| 27 | + @IBOutlet weak var moreTextView: UITextView! | ||
| 28 | + @IBOutlet weak var moreTextViewHeight: NSLayoutConstraint! | ||
| 19 | 29 | ||
| 20 | let uiscreen: CGRect = UIScreen.main.bounds | 30 | let uiscreen: CGRect = UIScreen.main.bounds |
| 21 | 31 | ||
| ... | @@ -24,6 +34,8 @@ import UIKit | ... | @@ -24,6 +34,8 @@ import UIKit |
| 24 | var selectedNumber: String = "" | 34 | var selectedNumber: String = "" |
| 25 | public var numbersList: Array<String> = [] | 35 | public var numbersList: Array<String> = [] |
| 26 | 36 | ||
| 37 | + var moreVisible: Bool = false; | ||
| 38 | + | ||
| 27 | public override func viewDidLoad() { | 39 | public override func viewDidLoad() { |
| 28 | 40 | ||
| 29 | super.viewDidLoad() | 41 | super.viewDidLoad() |
| ... | @@ -33,27 +45,76 @@ import UIKit | ... | @@ -33,27 +45,76 @@ import UIKit |
| 33 | // Do any additional setup after loading the view. | 45 | // Do any additional setup after loading the view. |
| 34 | getProfileRequest() | 46 | getProfileRequest() |
| 35 | 47 | ||
| 36 | - setBackButton() | 48 | + setBackButton("ic_close") |
| 37 | - setNavigationTitle("Ενεργοποίηση") | 49 | + setNavigationTitle(ccms?._titleOffer ?? "") |
| 50 | + | ||
| 51 | + backgroundImage.image = UIImage(named: "coupons_scrollview_white", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil) | ||
| 38 | 52 | ||
| 39 | scrollView.clipsToBounds = true | 53 | scrollView.clipsToBounds = true |
| 40 | scrollView.layer.cornerRadius = 30 | 54 | scrollView.layer.cornerRadius = 30 |
| 41 | scrollView.layer.maskedCorners = [ .layerMinXMinYCorner] // Top left corner radius | 55 | scrollView.layer.maskedCorners = [ .layerMinXMinYCorner] // Top left corner radius |
| 42 | 56 | ||
| 43 | - heroImage.load(link: ccms?._imageUrl ?? "", placeholder: UIImage(), cache: URLCache()) | 57 | + heroImage.load(link: ccms?._imageOfferUrl ?? "", placeholder: UIImage(), cache: URLCache()) |
| 44 | heroImage.contentMode = .scaleAspectFill | 58 | heroImage.contentMode = .scaleAspectFill |
| 45 | heroImageHeight.constant = self.uiscreen.height * 0.25 | 59 | heroImageHeight.constant = self.uiscreen.height * 0.25 |
| 46 | - nameLabel.text = ccms?._title ?? "" | 60 | + nameLabel.text = ccms?._description ?? "" |
| 47 | - descriptionLabel.text = ccms?._subtitle ?? "" | 61 | + // descriptionLabel.text = ccms?._subtitle ?? "" |
| 62 | + | ||
| 63 | + valueView.gradientBorder(width: 1, colors: [UIColor(rgb: 0x07A2D1), UIColor(rgb: 0x73CA34)], startPoint: .unitCoordinate(.bottomLeft), endPoint: .unitCoordinate(.topRight), andRoundCornersWithRadius: 35) | ||
| 64 | + valueLabel.text = ccms?._giftValue ?? "" | ||
| 65 | + giftTypeLabel.text = ccms?._giftType ?? "" | ||
| 66 | + | ||
| 67 | + giftDurationLabel.text = ccms?._duration ?? "" | ||
| 68 | + giftDurationView.frame = CGRect(x: 0.0, y: 0.0, width: giftDurationLabel.intrinsicContentSize.width + 20, height: giftDurationView.frame.height) | ||
| 69 | + giftDurationView.gradientBorder(width: 2, colors: [UIColor(rgb: 0x65DD6B), UIColor(rgb: 0x0D81B8)], startPoint: .unitCoordinate(.left), endPoint: .unitCoordinate(.right), andRoundCornersWithRadius: 35) | ||
| 70 | + | ||
| 71 | + borderLineView.applyGradient(colours: [UIColor(rgb: 0x0AA3CD), UIColor(rgb: 0x6ECA43)], gradient: GradientOrientation.horizontal, cornerRadius: 0.0) | ||
| 48 | 72 | ||
| 49 | activateButton.titleLabel?.font = UIFont(name: "PFSquareSansPro-Medium", size: 16) | 73 | activateButton.titleLabel?.font = UIFont(name: "PFSquareSansPro-Medium", size: 16) |
| 50 | activateButton.setTitle("Ενεργοποίηση", for: .normal) | 74 | activateButton.setTitle("Ενεργοποίηση", for: .normal) |
| 51 | activateButton.setTitleColor(.white, for: .normal) | 75 | activateButton.setTitleColor(.white, for: .normal) |
| 52 | activateButton.backgroundColor = UIColor(red: 0.47, green: 0.75, blue: 0.08, alpha: 1.00) | 76 | activateButton.backgroundColor = UIColor(red: 0.47, green: 0.75, blue: 0.08, alpha: 1.00) |
| 53 | activateButton.layer.cornerRadius = 12.0 | 77 | activateButton.layer.cornerRadius = 12.0 |
| 78 | + | ||
| 79 | + moreButton.titleLabel?.font = UIFont(name: "PFSquareSansPro-Regular", size: 16) | ||
| 80 | +// termsButton.imageView?.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1.5) | ||
| 81 | + moreButton.setTitle("Δες Περισσότερα", for: .normal) | ||
| 82 | + moreButton.setTitleColor(UIColor(red: 0.25, green: 0.33, blue: 0.39, alpha: 1.00), for: .normal) | ||
| 83 | + moreButton.setImage(UIImage(named: "ic_down_dark.png"), for: .normal) | ||
| 84 | + // TODO: UNCOMMENT | ||
| 85 | +// moreButton.setImage(UIImage(named: "ic_down_dark.png", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil), for: .normal) | ||
| 86 | + moreButton.semanticContentAttribute = .forceRightToLeft | ||
| 87 | + moreButton.tintColor = UIColor(red: 0.21, green: 0.32, blue: 0.41, alpha: 1.00) | ||
| 88 | + moreButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 0); | ||
| 89 | + moreButton.titleEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 5); | ||
| 90 | + | ||
| 91 | +// let htmlText = ccms?._description ?? "" | ||
| 92 | +// moreTextView.attributedText = htmlText.htmlToAttributedString | ||
| 93 | + moreTextView.text = ccms?._termsAndConditions ?? "" | ||
| 94 | + moreTextView.font = UIFont(name: "PFSquareSansPro-Regular", size: 13) | ||
| 95 | + moreTextView.textColor = UIColor(rgb: 0x415564) | ||
| 96 | +// moreTextView.textAlignment = .center | ||
| 97 | + moreTextView.isScrollEnabled = false | ||
| 98 | + | ||
| 99 | + toggleMore() | ||
| 54 | } | 100 | } |
| 55 | 101 | ||
| 56 | // MARK: - Functions | 102 | // MARK: - Functions |
| 103 | + func toggleMore() { | ||
| 104 | + if (moreVisible) { | ||
| 105 | + moreTextView.isHidden = false | ||
| 106 | + let targetSize = CGSize(width: moreTextView.frame.width, height: CGFloat(MAXFLOAT)) | ||
| 107 | + moreTextViewHeight.constant = moreTextView.sizeThatFits(targetSize).height | ||
| 108 | + | ||
| 109 | + moreButton.setImage(UIImage(named: "ic_up_dark.png", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil), for: .normal) | ||
| 110 | + } else { | ||
| 111 | + moreTextView.isHidden = true | ||
| 112 | + moreTextViewHeight.constant = CGFloat(0) | ||
| 113 | + | ||
| 114 | + moreButton.setImage(UIImage(named: "ic_down_dark.png", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil), for: .normal) | ||
| 115 | + } | ||
| 116 | + } | ||
| 117 | + | ||
| 57 | func showConfirmDialog() -> Void { | 118 | func showConfirmDialog() -> Void { |
| 58 | 119 | ||
| 59 | let alert = UIAlertController(title: "Ενεργοποίηση υπηρεσίας", message: "Θέλετε να γίνει ενεργοποίηση στο Κινητό μου;", preferredStyle: .alert) | 120 | let alert = UIAlertController(title: "Ενεργοποίηση υπηρεσίας", message: "Θέλετε να γίνει ενεργοποίηση στο Κινητό μου;", preferredStyle: .alert) |
| ... | @@ -162,6 +223,11 @@ import UIKit | ... | @@ -162,6 +223,11 @@ import UIKit |
| 162 | @IBAction func activateButtomAction(_ sender: Any) { | 223 | @IBAction func activateButtomAction(_ sender: Any) { |
| 163 | self.numbersPopupTapped(sender) | 224 | self.numbersPopupTapped(sender) |
| 164 | } | 225 | } |
| 226 | + | ||
| 227 | + @IBAction func moreButtonAction(_ sender: Any) { | ||
| 228 | + moreVisible = !moreVisible | ||
| 229 | + toggleMore() | ||
| 230 | + } | ||
| 165 | } | 231 | } |
| 166 | 232 | ||
| 167 | // MARK: NumbersPopup | 233 | // MARK: NumbersPopup | ... | ... |
| ... | @@ -8,23 +8,33 @@ | ... | @@ -8,23 +8,33 @@ |
| 8 | import UIKit | 8 | import UIKit |
| 9 | 9 | ||
| 10 | extension UIViewController { | 10 | extension UIViewController { |
| 11 | - func setBackButton() { | 11 | + func setBackButton(_ icon:String = "ic_back") { |
| 12 | let uiscreen: CGRect = UIScreen.main.bounds | 12 | let uiscreen: CGRect = UIScreen.main.bounds |
| 13 | 13 | ||
| 14 | let backButton = UIButton(type: UIButton.ButtonType.custom) as UIButton | 14 | let backButton = UIButton(type: UIButton.ButtonType.custom) as UIButton |
| 15 | + if (icon == "ic_close") { | ||
| 16 | + backButton.frame = CGRect(x: 0, y: 0, width: uiscreen.height * 0.025, height: uiscreen.height * 0.025) | ||
| 17 | + } else { | ||
| 15 | backButton.frame = CGRect(x: 0, y: 0, width: uiscreen.height * 0.025, height: uiscreen.height * 0.02) | 18 | backButton.frame = CGRect(x: 0, y: 0, width: uiscreen.height * 0.025, height: uiscreen.height * 0.02) |
| 19 | + } | ||
| 16 | backButton.imageView!.contentMode = .scaleAspectFit | 20 | backButton.imageView!.contentMode = .scaleAspectFit |
| 17 | //backButton.setBackgroundImage(UIImage(named:Assets.Navigation.backButton), for: UIControlState()) | 21 | //backButton.setBackgroundImage(UIImage(named:Assets.Navigation.backButton), for: UIControlState()) |
| 18 | - backButton.setImage(UIImage(named: "ic_back", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil), for: .normal) | 22 | + backButton.setImage(UIImage(named: icon, in: Bundle(for: MyEmptyClass.self), compatibleWith: nil), for: .normal) |
| 19 | // backButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: -20, bottom: 0, right: 0) | 23 | // backButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: -20, bottom: 0, right: 0) |
| 20 | backButton.addTarget(self, action: #selector(moveToBack(_:)), for: .touchUpInside) | 24 | backButton.addTarget(self, action: #selector(moveToBack(_:)), for: .touchUpInside) |
| 21 | 25 | ||
| 22 | 26 | ||
| 23 | backButton.translatesAutoresizingMaskIntoConstraints = false | 27 | backButton.translatesAutoresizingMaskIntoConstraints = false |
| 24 | // Add width, height constraints | 28 | // Add width, height constraints |
| 29 | + if (icon == "ic_close") { | ||
| 30 | + let widthContraints = NSLayoutConstraint(item: backButton, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: uiscreen.height * 0.025) | ||
| 31 | + let heightContraints = NSLayoutConstraint(item: backButton, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: uiscreen.height * 0.025) | ||
| 32 | + NSLayoutConstraint.activate([heightContraints,widthContraints]) | ||
| 33 | + } else { | ||
| 25 | let widthContraints = NSLayoutConstraint(item: backButton, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: uiscreen.height * 0.025) | 34 | let widthContraints = NSLayoutConstraint(item: backButton, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: uiscreen.height * 0.025) |
| 26 | let heightContraints = NSLayoutConstraint(item: backButton, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: uiscreen.height * 0.02) | 35 | let heightContraints = NSLayoutConstraint(item: backButton, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: uiscreen.height * 0.02) |
| 27 | NSLayoutConstraint.activate([heightContraints,widthContraints]) | 36 | NSLayoutConstraint.activate([heightContraints,widthContraints]) |
| 37 | + } | ||
| 28 | 38 | ||
| 29 | let leftBarButtonItem: UIBarButtonItem = UIBarButtonItem(customView: backButton) | 39 | let leftBarButtonItem: UIBarButtonItem = UIBarButtonItem(customView: backButton) |
| 30 | self.navigationItem.setLeftBarButton(leftBarButtonItem, animated: false) | 40 | self.navigationItem.setLeftBarButton(leftBarButtonItem, animated: false) |
| ... | @@ -217,3 +227,65 @@ extension UIFont { | ... | @@ -217,3 +227,65 @@ extension UIFont { |
| 217 | return self.systemFont(ofSize: pointSize, weight: .medium) | 227 | return self.systemFont(ofSize: pointSize, weight: .medium) |
| 218 | } | 228 | } |
| 219 | } | 229 | } |
| 230 | + | ||
| 231 | +public extension UIView { | ||
| 232 | + | ||
| 233 | + private static let kLayerNameGradientBorder = "GradientBorderLayer" | ||
| 234 | + | ||
| 235 | + func gradientBorder(width: CGFloat, | ||
| 236 | + colors: [UIColor], | ||
| 237 | + startPoint: CGPoint = CGPoint(x: 0.5, y: 0.0), | ||
| 238 | + endPoint: CGPoint = CGPoint(x: 0.5, y: 1.0), | ||
| 239 | + andRoundCornersWithRadius cornerRadius: CGFloat = 0) { | ||
| 240 | + | ||
| 241 | + let existingBorder = gradientBorderLayer() | ||
| 242 | + let border = existingBorder ?? CAGradientLayer() | ||
| 243 | + border.frame = CGRect(x: bounds.origin.x, y: bounds.origin.y, | ||
| 244 | + width: bounds.size.width + width, height: bounds.size.height + width) | ||
| 245 | + border.colors = colors.map { return $0.cgColor } | ||
| 246 | + border.startPoint = startPoint | ||
| 247 | + border.endPoint = endPoint | ||
| 248 | + | ||
| 249 | + let mask = CAShapeLayer() | ||
| 250 | + let maskRect = CGRect(x: bounds.origin.x + width/2, y: bounds.origin.y + width/2, | ||
| 251 | + width: bounds.size.width - width, height: bounds.size.height - width) | ||
| 252 | + mask.path = UIBezierPath(roundedRect: maskRect, cornerRadius: cornerRadius).cgPath | ||
| 253 | + mask.fillColor = UIColor.clear.cgColor | ||
| 254 | + mask.strokeColor = UIColor.white.cgColor | ||
| 255 | + mask.lineWidth = width | ||
| 256 | + | ||
| 257 | + border.mask = mask | ||
| 258 | + | ||
| 259 | + let exists = (existingBorder != nil) | ||
| 260 | + if !exists { | ||
| 261 | + layer.addSublayer(border) | ||
| 262 | + } | ||
| 263 | + } | ||
| 264 | + private func gradientBorderLayer() -> CAGradientLayer? { | ||
| 265 | + let borderLayers = layer.sublayers?.filter { return $0.name == UIView.kLayerNameGradientBorder } | ||
| 266 | + if borderLayers?.count ?? 0 > 1 { | ||
| 267 | + fatalError() | ||
| 268 | + } | ||
| 269 | + return borderLayers?.first as? CAGradientLayer | ||
| 270 | + } | ||
| 271 | +} | ||
| 272 | + | ||
| 273 | +public extension CGPoint { | ||
| 274 | + | ||
| 275 | + enum CoordinateSide { | ||
| 276 | + case topLeft, top, topRight, right, bottomRight, bottom, bottomLeft, left | ||
| 277 | + } | ||
| 278 | + | ||
| 279 | + static func unitCoordinate(_ side: CoordinateSide) -> CGPoint { | ||
| 280 | + switch side { | ||
| 281 | + case .topLeft: return CGPoint(x: 0.0, y: 0.0) | ||
| 282 | + case .top: return CGPoint(x: 0.5, y: 0.0) | ||
| 283 | + case .topRight: return CGPoint(x: 1.0, y: 0.0) | ||
| 284 | + case .right: return CGPoint(x: 0.0, y: 0.5) | ||
| 285 | + case .bottomRight: return CGPoint(x: 1.0, y: 1.0) | ||
| 286 | + case .bottom: return CGPoint(x: 0.5, y: 1.0) | ||
| 287 | + case .bottomLeft: return CGPoint(x: 0.0, y: 1.0) | ||
| 288 | + case .left: return CGPoint(x: 1.0, y: 0.5) | ||
| 289 | + } | ||
| 290 | + } | ||
| 291 | +} | ... | ... |
-
Please register or login to post a comment