From 7c75b9bac72aa94ac0f368d92fe84902d9cb87bf Mon Sep 17 00:00:00 2001 From: Xavier Schott Date: Wed, 6 Jun 2018 14:18:18 -0700 Subject: [PATCH] Fixes #26 --- TGPControls/TGPDiscreteSlider.swift | 75 +++++++++++++----- TGPControlsDemo/Podfile | 19 ++++- .../TGPControlsDemo.xcodeproj/project.pbxproj | 16 ---- .../AppIcon.appiconset/icon1024.png | Bin 12757 -> 12421 bytes .../AppIcon.appiconset/icon120.png | Bin 1495 -> 1347 bytes .../AppIcon.appiconset/icon152.png | Bin 2015 -> 1868 bytes .../AppIcon.appiconset/icon167.png | Bin 2377 -> 2223 bytes .../AppIcon.appiconset/icon76.png | Bin 879 -> 810 bytes .../launch.imageset/launch1024.png | Bin 13883 -> 13887 bytes .../Base.lproj/Main.storyboard | 6 ++ 10 files changed, 80 insertions(+), 36 deletions(-) diff --git a/TGPControls/TGPDiscreteSlider.swift b/TGPControls/TGPDiscreteSlider.swift index 9ce1a59..a4dd013 100644 --- a/TGPControls/TGPDiscreteSlider.swift +++ b/TGPControls/TGPDiscreteSlider.swift @@ -41,7 +41,13 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER { } } - @IBInspectable public var tickTintColor:UIColor? = nil { + @IBInspectable public var minimumTickTintColor:UIColor? = nil { + didSet { + layoutTrack() + } + } + + @IBInspectable public var maximumTickTintColor:UIColor? = nil { didSet { layoutTrack() } @@ -78,7 +84,7 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER { } } - @IBInspectable public var maximumTrackTintColor:UIColor = UIColor(white: 0.71, alpha: 1) { + @IBInspectable public var maximumTrackTintColor = UIColor(white: 0.71, alpha: 1) { didSet { layoutTrack() } @@ -223,12 +229,19 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER { var ticksAbscissae:[CGPoint] = [] var thumbAbscissa:CGFloat = 0 var thumbLayer = CALayer() + + var trackLayer = CALayer() var leftTrackLayer = CALayer() var rightTrackLayer = CALayer() - var trackLayer = CALayer() var leadingTrackLayer: CALayer! var trailingTrackLayer: CALayer! + var ticksLayer = CALayer() + var leftTicksLayer = CALayer() + var rightTicksLayer = CALayer() + var leadingTicksLayer: CALayer! + var trailingTicksLayer: CALayer! + var trackRectangle = CGRect.zero var touchedInside = false var localeCharacterDirection = CFLocaleLanguageDirection.leftToRight @@ -275,21 +288,27 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER { trailingTrackLayer = (.rightToLeft == localeCharacterDirection) ? leftTrackLayer : rightTrackLayer + leadingTicksLayer = (.rightToLeft == localeCharacterDirection) + ? rightTicksLayer + : leftTicksLayer + trailingTicksLayer = (.rightToLeft == localeCharacterDirection) + ? leftTicksLayer + : rightTicksLayer - // Track is a clear clipping layer, and left + right sublayers, which brings in free animation + // Track and ticks are in a clear clipping layer, and left + right sublayers, + // which brings in free animation trackLayer.masksToBounds = true trackLayer.backgroundColor = UIColor.clear.cgColor layer.addSublayer(trackLayer) trackLayer.addSublayer(leftTrackLayer) trackLayer.addSublayer(rightTrackLayer) - if let backgroundColor = tintColor { - leadingTrackLayer.backgroundColor = backgroundColor.cgColor - } - rightTrackLayer.backgroundColor = maximumTrackTintColor.cgColor - // Ticks in between track and thumb + ticksLayer.masksToBounds = true + ticksLayer.backgroundColor = UIColor.clear.cgColor layer.addSublayer(ticksLayer) + ticksLayer.addSublayer(rightTicksLayer) // reverse order, left covers right + ticksLayer.addSublayer(leftTicksLayer) // The thumb is its own CALayer, which brings in free animation layer.addSublayer(thumbLayer) @@ -300,11 +319,6 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER { func drawTicks() { ticksLayer.frame = bounds - - if let tickColor = tickTintColor ?? tintColor { - ticksLayer.backgroundColor = tickColor.cgColor - } - let path = UIBezierPath() switch tickComponentStyle { @@ -363,10 +377,35 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER { break } - let maskLayer = CAShapeLayer() - maskLayer.frame = trackLayer.bounds - maskLayer.path = path.cgPath - ticksLayer.mask = maskLayer + leftTicksLayer.frame = { + var frame = ticksLayer.bounds + let tickWidth = (.rightToLeft == localeCharacterDirection) + ? -tickSize.width/2 + : tickSize.width/2 + frame.size.width = tickWidth + thumbAbscissa + + return frame + }() + + leftTicksLayer.mask = { + let maskLayer = CAShapeLayer() + maskLayer.frame = ticksLayer.bounds + maskLayer.path = path.cgPath + return maskLayer + }() + + rightTicksLayer.frame = ticksLayer.bounds + + rightTicksLayer.mask = { + let maskLayer = CAShapeLayer() + maskLayer.path = path.cgPath + return maskLayer + }() + + if let backgroundColor = minimumTickTintColor ?? (minimumTrackTintColor ?? tintColor) { + leadingTicksLayer.backgroundColor = backgroundColor.cgColor + } + trailingTicksLayer.backgroundColor = maximumTickTintColor?.cgColor ?? maximumTrackTintColor.cgColor } func drawTrack() { diff --git a/TGPControlsDemo/Podfile b/TGPControlsDemo/Podfile index 2fe7474..ef7a788 100644 --- a/TGPControlsDemo/Podfile +++ b/TGPControlsDemo/Podfile @@ -3,8 +3,23 @@ platform :ios, '8.0' use_frameworks! target 'TGPControlsDemo-Pods' do - pod 'TGPControls', :path => '../../TGPControls' - #pod 'TGPControls' + #pod 'TGPControls', :path => '../../TGPControls' + pod 'TGPControls' end +# Failed to render and update auto layout status for UIViewController : dlopen(Cosmos.framework, 1): no suitable image found +# https://github.com/CocoaPods/CocoaPods/issues/7606#issuecomment-381279098 +# https://stackoverflow.com/a/49936237/218152 +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings.delete('CODE_SIGNING_ALLOWED') + config.build_settings.delete('CODE_SIGNING_REQUIRED') + end + end + installer.pods_project.build_configurations.each do |config| + config.build_settings.delete('CODE_SIGNING_ALLOWED') + config.build_settings.delete('CODE_SIGNING_REQUIRED') + end +end diff --git a/TGPControlsDemo/TGPControlsDemo.xcodeproj/project.pbxproj b/TGPControlsDemo/TGPControlsDemo.xcodeproj/project.pbxproj index 793e539..5a4f612 100644 --- a/TGPControlsDemo/TGPControlsDemo.xcodeproj/project.pbxproj +++ b/TGPControlsDemo/TGPControlsDemo.xcodeproj/project.pbxproj @@ -164,7 +164,6 @@ DC56BDC01E46DEB900AAD0D9 /* Frameworks */, DC56BDC11E46DEB900AAD0D9 /* Resources */, A772C50843047EE677ADAF15 /* [CP] Embed Pods Frameworks */, - 3FF2E09CAFA7D92A488FACF7 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -258,21 +257,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3FF2E09CAFA7D92A488FACF7 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TGPControlsDemo-Pods/Pods-TGPControlsDemo-Pods-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; A772C50843047EE677ADAF15 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/AppIcon.appiconset/icon1024.png b/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/AppIcon.appiconset/icon1024.png index dcfa0ae564da58978ca698e11520e0298583ca02..1deb8d9cd88c18f2b3d2e3a99f50a4ef4c69952b 100644 GIT binary patch delta 4135 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 delta 4467 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 Cl(%^R diff --git a/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/AppIcon.appiconset/icon120.png b/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/AppIcon.appiconset/icon120.png index 974be774b870cf43968e010ed3f32dd8c319f554..e49557d58a7db02ab3b9efbe5e9d1d2947724e57 100644 GIT binary patch literal 1347 zcmbW1X;2af0EIC;3ZykW0qGKRDmw5Q5;_!6sl+raTUWG<#3KzAHP#?Q$s@#L%GN*w z(pE7|O>iUgN|?qp*vdSHu{9O6Ro3z-cguDE?!Vn1@4b2N|NHV!Py!$zI0yg$K*)i_ z(6!9`N9)(Exx!MC3jkPv$V6Xirs#K(KJ?WQCw{wqd!UKOv@sVtt8D{>IrCRbY+ug2 z-dP=OV>wb9ROeTF$?WNL5ytakMd_Ss(^%|NCORmiT$R!Qf~NTEyAnb&n?1EF#i-e!l$eid);r%nk3QF?e%%!7Ja6`_9> zDr|e1ht>Fp!?Yn2`aJ^#kq%cJ-%&}D8CTBcTwbF8d79OGS0fYJz4I$^yWGpAdDm?i6`nWSb zKM^+9GwK(bd_KCz92XOcty6J1DEN;MtM;y`L&>wJodbc-w^p0UAHt-VTO0;$OVRp> zl*zTt6{Qa8w-H1cHD!Gj$Kk_Ajt1WF$i_M%?@VAV({mHtWKlzMy2$cRIL5?yt45rY4n~rJ z`)u{Iu0|T7YLwKS8W#P|=@2R$pii^xoffi;xW9juCoh7sl-;GbLB`BIs2FYN@v#V*g@xVyYF4VW>n0SOf?XVLe+rvMe89~=wzK1!6mi4S54z9c2XRC|BUT7)sR0u!aE9F)*{Z z7S8x9QaL&n5$-V&q4}VUYLo{d%Mv=qJG;XagyLP$fn(j;{hg&!Z~?o3fo5|!G@9r3 zeem}719d32B&C7&I?#TD!PONJS-r>QZc^QcX=!k9up?BQywa7Y);d5TENJ9mU4>7m zGX?3tyGJFBd|)l`Hq8x+dirrPP%Db7Kvh3uUWrAC5i!p`AT}=VXzzla|=|d|f`L>Q!#MRPO-%U10%D_5} zaS&7l(4(LEDLYEE5HTvP(0zkGE!a<3vQ=UwE7r<5fyUp$P;37)G83r_SABP}&(~Nj p*n~GZ{co`Rn@jTu0AO_$2ypaLIJr|KHEVDLkVzC`gJ1NuzX8zDYuEq) literal 1495 zcmbW1Yd8}M7{_gmgstNiCM)USxa6{7E@i^lgQ=}2Im~i2=5`L1r5tQ7o#fgL&1{n) zClVSVmsIu~Lqpn;OSG0Pgpy@s$2s56mp=U8|MUNUdEXE3^UFDg^#Q9v)s&Q!z!+aI z+_oqGD^=k3Y*DGmR#H-CV!S*~Br_HmA%TWLI_S^*iHCuyIr3wgI0;_I+oD9R0`=4W znTmP~=d+}|0RN1h(zc?k+#T+0{*nHdw#>%AlGpsDvS{`2jREJBhVkYXll#`M=fHFq zdlcTl_=7aZ>nKAEJO7{ntwlE3_3#?#weR=UwF_*|H}2}Th26At;T=}*oo{<l$ny!6KvJP@nnAEDJqJ+Sa9bo4c@XVm#q7`Fs?m zf%WQvVO%>Ul{YCvunqEqvy_7w*#2S>2>>p!m57(#Pkf$BA?#ck|M;aaVxoE4LRzn} zr$)P7jei1nb?2hma}P5PWZ>1(pi>T#Fl;n#;(=D z;E+s;Zl!rY>vMaMC(Md$np$0X)S^!S&43qg7^B(FF@L){mrZfYzKwvL5>!ft>a-?+ zh{p473Q}|I12dxoPiI>4cXbhBu^VYntJVXJetVS{~2{Je2^VnVDHWT9iZ_i{XyNTx9AM(A}|}Gv1Z1 zhc)-4HsQzkOA0mC=4|-pQy%Q29F!0!Ygl}{?5hL9enll9dVq{;=4fgpVfeQyTyR(z zlf_cBHMF(0WoKt|x!lO++xFCs5f}Kbe!=f@+1LeFUSWEC8n;RBzu$^9eF6=d`ZB50 zpXEQ3wHxHK!>R|M$sWPGY9exzT*?Or1B6q(@pf87dz4n}2ZC7Qxfb#3{;g%XsI|M3 zwjjKh@7h6N)qm#F*4jebP9mX&dbo8e7A4;0NZI|(W&FE?sG1l!%1n2vluJd>9D)ki&ri>D4?Q&(F`#L|8GO8XIc~p%1^8 z!D*(R<6QmQL&tHWNI#s&0>U%agaQg~oSOkcC6}9E5c%?QLSka#86jjX89E1`3se*K3RKB#ZOJFvN$HiF5z=J`gK3p=;TcJ+>?37J{3vB^o+_ri7AN(* zo&UkD&!xdLfoOK?m%4M#wFo2?djoBL);R!*G23b$6;#!wp-bN3UX@_E_h68y`MMby%>q_*ez}$5S{MGs(dWtlqBKCmeLg`6DbXABGn|BNGnoI zqz+o>k=)~XoS<*|7@G!r+zPvV)x{AnRnDv)v4pD^g#j(60>2Mw|IfwM-P?p#D0V2_ WrHk+*5or7EsD$yxdfh*II^!R*W50y} diff --git a/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/AppIcon.appiconset/icon152.png b/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/AppIcon.appiconset/icon152.png index bfe6952b67be6bf46e3215a1ca28032f919d966a..dadd69f79e066f67027103f67526299ac33044cb 100644 GIT binary patch literal 1868 zcmcIl={MU66ph57mZ(@#YKe%Jv{R&(bc7L0#WL0^VW=hAK~c3es4camw0<&(ogx!k z(b7e&T~djqhDxYfN~xtPEoRVKM*o31XFkk__ue`8y?Z~sb1&7w&Qd~DK@6K^vnzEz_I#9Umc+|}BR!J8_% zU$su?S%A-5BS;Wci6Go*%^bein1S&v4s0b;si@#gv8$y9>fyrsFK54@}L+EW|vx-Zt^XGjLK}e{ZKd?^xIDY5kX{#-!TbBbEdpF4qv6@lgA}=uh9I zt#XTue8by@J9io7K5)|v$~y-v0&3%EfK3s^gegQGDX_PM^ZyQIFIaz$&C%FC0nMPO zQL~}-KS)4Otd6}Jyx60>$KL8Yn79q76+#sScW9CTp$Z$F8AE2|wrFRSXT)Lxl!^?H z2HQ^KkuN@#Wyb&fI9}mKGd5cnqrFzj=t2a{jbe?Nor})MV*TZ5N_JS#^Xle$7) zq{k;!`5=YD`x*-T+rv797mTxs_{ec!J5^YKr%otl?Xue^+YX(o zwmXW+LT;$_P^9RHp_VvYyNGYQ&Y)(`sMh4eoL43ajF@b4^MbOOdTMex7CM@ag;3AV zznv}8M7Fql-mjsPk3~A_*AQZP=5V~}EB3qn=zw_%E zhFaFhvf1WMyurdgq9+LL*;)kwjuBnjc^{-*ISz_4%WOwFQ=4%2fzCx;DdUgH$5oT< z*R5ukm!~Enb%qu)wM5*LQ(lbP!vyPhTU(F0fuC$gmLlxz>_i#C5$$j4Hcf@|@3w?^ z@r(DruGfux*6OU6JuaG3As+=4&9MHXY-PzUsfrTSHo3^8XN@lmmZd$v z%H!EWwkQsq#-O?Lfc z$U?JXzym{E-Fx>mBbGa{;x`TNy$GdR5m`MtQXV~>I;02?uExf`r6Gx3(}QOyFX@I~ zBRyA}nE5ZqdV}M1s>-5u1am3q`&9%X!EiHAWy12fOa&n?yq{xEW+7%gEHr5@t2r9u z6NffTWjNK}oMEU};G#dmcrhJb=WBn%ExQ#pJ54BY(ERWr_tJWO7&p0BQviloE5S&j z3g5tFd^|injz}7L!5I2aWE+JOT|1_>y`ZS5dY-1Eu8ekHw8M|p#V~|Vx1$j1RmoFt z2Po=fpIQ)@c-vQLNKXY-%TTm9a%IkZ6bH;J5Cn+Q?465FCdLo|=H3A&Vp`BkD<(}!=_;b5=&%FE!d0{?+Bu?zG(0hdE75hmDqmMlzAkTb>ZC{EC_IlT zoySn#{_xEy>rIRQ7Z*7;NbZ7*IuS}tBPCt+|9eGF<3y`}xe(_U9Cz$=2i1}j9O+^c z5^?usDgRc3b%;^pxi#%{i(iz5bnJ=`%TbupK1L{OKMtvB^bL~;C# z;n`Y<`KN7Sy>P%) z30R)e9naEx3{K++ob}xnRn$i}A)-~yqOv437-VqMcQT`Ybu@JGPI=1nCjRbI?%B<$ zgXex>KL#rD@mon&qI{sEuK_h1sO4k7`c)=mnllG%;~86=#0zL+L|N;9%#D2k5NLmY zWhhDfAm6$X2_Iuyn15!ct4UcRZ<{Mpv9K`IEaAn!03zS{5Kw@2ufk7DlDGpEkd=j< Jd4s8U@;|)oR=xlL literal 2015 zcmcIl`9Bj5A0M&}bIoYY_|76nb3U#w!?0>YmNR{kqeUAf9fV?zVY!bvhDM>5a(h@F zUlfn)n;f0A+((=8NGoOd>K}Msujhy7htKhPzu%wtkDoW=lJ#Un+RfIVoCc;uzir1eS{MBA+D8c6&LBMgwZiZ_n{c+_E5!SO*D{*hvcXKKL|Xi8s;E1&NPy*B}WYBa(4YNwIW^eB9@?Q zsyeJCMC#bV!gGCY9cF8%Ux(s6(0Ai5^FLR$b@% zcb(Cn(Jxk4$&i=nKQR;AofckYcd)z3$h-HpkD98K`RarB5}eJ@ZHIV@f5_4Hb&_dW zTFu0>2xHm03$1U#=5*QM7At|3b}{a!{b8yavo0V3+x5oSLb5xQ!N1WT(i90BXJ!j4 zFVSAcG(=X7J$t;RQ3CEZHvXB8KBaK`s?Iwr0F?KJo(r$KX~`wY&*`|r(j44cuZY!t zLgmf7zUWLS=RF7gg0rNrJr1Q95^gOPN1XlGw2D=fW2w*FMNE8NaCNpvmsP|;({63b z_eEAQhAW+3*PcZAt^G1xd}(I}_m~3Zxo(cgk&@^w&8;-;#<2PBEXa4Uq&i+5)A6vU z=%8x`y)Q{YuI|b=N0VwexuyX3AJNJUg{zBR7ca;myev!?8M5w9oI?IL`i#l4Yx<%` ziSt>1+ZbeXt26$d^hS$d%|N*c#}{Wk4{7qj^6UHz*lhNIo-Z+?ll7S{XXLB*q1*aN ztgk}EHye2TY=Dc4vNnQV%NazOIan%Og7`^)e>xQFea$Kl$ItTCWAb>stgNiIwzlq{ z!(Vt{&{leD%h+hCl z_fjsaA;A_v1A5#XxdS1Wqpne4AMAK%MOm62Zk}P%e0YM1yV&S^lFT8mV|$#au!FnY zn65YALD|wf*^-SuPMGmlYDyVsR;NS8b+Xrp@AZk=p*EWH)WjXXyctty@yA;QSCKx` zX%5rrj%+ua?08+JyPIEUn{gSet>VnkVxM8B=~-E%u-zBIuywEV2Wf%_0~FN*z%0@P`v@ zS{Y}_uSwvzxHygJHMR~3t{E)2Xn(vK-q@$d0BNzzHx5|&eGS)EhN{PI{X>heCOJ5+ z_$>0&E9!MW&MJ1I!vb^<0wK>Q?aOnxU%RjiKM5U@qYMEF1xWu-B}9U8DJnEnJJu3d zqmD$*-dO!n1kU4V-n0YU<@3hBuYy6cM~|o$UO*r$4WedMEVVC%1H^EE0aH}ddg~wh znaSsrONA{*Q%4ujCR(|Xo7C8MW=PHV;w$(Ub%_9RONZt#IAL)~C=}}AmalMsPrlh= zSS!I$UV%VIOT{&DDbWRxFOsyymn`65%zf|PCf+VBKTT8ue6lZi2l%LCN+N_{i|GgV7TkGdlVz%-UVSVx&n&%9^YN+?-ywcK-A2T}?$CZB~9sd>UwlRVVF^fNh zCy8QYX-51T%~Ngz0o_3ScpZs|sd6<$;HIU%}o-vvNC=8CU(2u%7LT}O`E diff --git a/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/AppIcon.appiconset/icon167.png b/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/AppIcon.appiconset/icon167.png index 87313e569076cc97edb3bebde23df2ed6934546b..76c223d814aea3b7bd2a077a5369b1616676428e 100644 GIT binary patch delta 1792 zcmbu7eLT~P0>)2C@*46%7^051Yby{=lMgErcq)FoJd8$E(Q^6 z)@$FRxR=z2rIz#g>puk%$}@8<+s$qpp@g-2sxWA#KMq-HY>}IzuCb1vE(y>yT$U|e zHdX#-l(TP&e`z_u>r5Z1h4zIBuSVHf;4b3Zca`2aQOb4V5wxv^$@D<$9PEnx(cclvMhg<+z3 zL}vH(x&^z>Sl}LqP|f_1o;Guk0wK*at7+_R^qH6w?n~7f8mjWbi0NXgPGHO`*C8s=BiK zjh%mTYjEfZ;f{-7n);LghU0c;qg~l$jpR(|qitaPjI%c=-Qs2dP&Z_eSWB2*KFR)t z?#4|h4^8xk=NMvvVcg!&o`q0_jHBNdJF88YDTb|iLLY{M3nO%kU$rA`XG_qX2YTw`SCcW&JyzM5$$hG>EsPld|t`7t3$ z084(xr`+YfN`tNVcd{Ch2=-0miheaILjiKtAKpmP-d!hAMfTYEM;q%t|d#i zDj{De=3c)j+mE1!-EgZ>Fj0UXdh29C-ty~W?VTQjiPjm*d3BBUuwr#Q!_RmS+XS_U zh_)G1S2j^9*pcK?ADbu+|YOq8hT^r@dI$BByF|olLn4ZYKNq@m&{UqUzJpmaSrm}eK z^&~H`jN6^{24H>IlfD<#(XK%q$R6Aup3Sb%Vv_#!3}H`o;NCB-RUzc$fBUYKy-p7Z z8BS~uqeMcVle!=96pNB#-A@q~GJpKIMu|-`Q|11OAi-*H|05*s=iu}~X=#>k8+ojB zO)8a2N+(-pKHWHCWRo@rrOK^%Eg@!94aJVnRYf>&fU!bevXiS_H@8C%BN&~XRT?kO zZ(mZr;tuO+O*`UqZRPk&(51r%~k_lx25`_?+CQkpcXH!C71PC*1=~D~wPU@$E^ihSGWej9f`c%^uM2JctxzD4 zyr5*vKgnLNgG#fW>W&w!(EZ^oYi|(15fJ{AQ2AS{tE*%FaOdlHNg^WqEFS-HLJ7~{ zp66UlkQEg++u<80IB5}`K0HAen5dR?hdJ)dUM693qSZKSc4IBOLo%g=TNTD2FS1*`oeYsgM9j4c}Ca82Ao*O?m6n{gxx-1^J;j2T-?=+E# z?xOkcdi;iZf3&laa=tpX3S#P94l)j}5~%a7MTu{6v9``P`tN6{${EKiLeY;VCadi% zEIIPf@acyq(5tH>dZ*3^v+GVLAQ^`h54J|>w#6C`F! zx|mW3#`kR|a=xGDVC8$8u2QIn8>pMA$(hXMU0Rj36IEH!Ft4PAABTCF1>I8Wd66A) z0frfIG3;KQ_=vlVy5AxR_IO$6zb7b(s0Xj$!74T8c}`dOPdXi@=Wi4aD1?^hZ=C%a fbRb8kC^R0?qRJpDv`<&he|IQ^4+_@i6`B1Xj4Y4E delta 1952 zcmb`8dpOez1IKYv@9Bbckt0+rX8WzP^=l ze3;Al@}H8#-(-oW_{X;ghsF1XiF@|`q~$qm=t2JT@13k)695n%SNBLS+b))U<(?23 zR3Q#MI3>mi#us+`#Gnc~4KSe~un_cDug zLFe}Q1$94y6~2OER}^)Tfg3QB?lZW7BNZ>G15N-3N)qhBuKGv$H@~{0OJ%0AzU^pO zvg*H)*$3KH|KKM6yw$RDyp z0fuDv#~uV&MI^tNxtgMZJHz%#;ieGtvREiplMbGaoibTGid!?=31u%Z5u_#ZA%+cA zTk3Fc6F!)*sJ>^8VyAt1T>9#U#c|u^hWFExy-aH`6jmBsb2`lA7<)8P3t?s#PfnXy znSOg(k)YqGgWxu%@sEN_cYXQ-CV)(t$OHafh;)_il%I2z&dTX9W-p=q%eX~yAf>sb zPNFnM)(>Rw4UGS>uDMKzNld4qD*XZ*w-md@rzhErVmHfhq;$nvGw}t4Z)R<>%(;{tDM{6v|7wZH7CK&`%zF zy)sz=0BK1$<%mMtRy4-T19kv(&TQyQi<&PFoP@v_`V;Z5{NPgrnB*VFu5}|Z`myU0 zF15Px^Pz=<#kBW?RGd|nGsP#yy z0LVR`-)|q2sYUdEtm}b6#nKkhQ8$P0LQ!imVeKn(>G8N*}7Z2g4 zA)r0%jN^G!%sc!YWO0~cJ2*=$DJk*!5|Nnt`m;-Ok_#f}Vgzxt+fbGK3a>c9glt^| z-u;M}W?F6Le;$l53>JHOSRa5c-9l}*%e#BW_~h*dJ@>M(RjPdWJl!+<<}PsVK@o+d z+xQ6DRMa{Yg|*#fOW{3q%5sa^=U5D#G|2V{X-{%6diiX6zWyx{f*N%*e(bC|2-yV{@g4&z8nUHo=EXd!`BZ4h5~^lD6@;5K&NojSx zAo+4uo`_Yrc05Ua@fIzABHWm|R#|V4JLrZtl#Xg1UVCFnkZHCr-lq+TaQOZYcQy*j z?NM{_gx3{0iawJSc<5JA$nH|BjOZKN-7#@h6)Z@OHXgxWsOf50GFDSl+uRg4uWtWC ZegDaq*ODXYV8oVF^K$ov*SlRw|2INu2XFuY diff --git a/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/AppIcon.appiconset/icon76.png b/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/AppIcon.appiconset/icon76.png index af9c220e89e4a893bd0507b09c37a498eb7f9c3e..fe11cb9f91500eab001a1bcc4c41b084c7ec63f4 100644 GIT binary patch delta 788 zcmV+v1MB?n2C4>-BYy(%NklGd{b3UIlGrr^`Zh=nzb^wnd4=F_+ zQi?pJ6nRJ~@{m&GA*IMeN|A?@qQ)Ur949JH)iPDv&&Ja1V1JSwY+4OMW^D0vp{}N@ z_uqcJ9p7Ax*1gR5z*i3PFB;G+X_B=ONF8x-y}BI#eD(QPH{5iBJFFXQjQu$hZfHO= z8k>&JIXLy~y8LgjZZ2Wz3&`dMB(6NaEb_q#*v!!|$-4HRkI?Pryy3mpC4B|GW z&LEjr(L6c-a(_!&j>WT$?hL|EsXIp~I(Q|SEbt&<$)^2x9aULUhABxjnXqUJn2Fh3c*ellx8rrBVFjN!y&o6=5oyWdb4k4Zg7M< z$B;^?#F8qkaD3;&npOU&OuqbdXY8m<;s|%eT;3aJDI~2YlgVH(m_IqihQr}}&W4rj zv{CWZH0>UP*ZH`9{q)QjU#p|y2zR-PB_skPyxG|)M!tefVw@YU5xb|j zqW=2}^eSq_t(KPXo94JZk3Zx;$ckI?NHT82!(}b`uL-o|zwptL|LRUl{!3UR;jhze z3IAb)E#W_L`FG?YrN~1{k%yEb4=F_+Qi?pJ6nRJ~@{m&03dr98009600{};Xd42!x S^bM;30000E0p>v-y=Cl8>Wymb)hsYp*CGddg` z#s*svMwAxF2Rbd4{sBHD&dw4j4b8@nH~X8NPCj<`{XKbivmxo8n*;6rZ3BNo7E+2V zq!d|5DYB4KWFe)xvfeN9)I-1gIOy>$dJt)O}x|5 z?9G=Swf@Et4b zQe%+JtHIbmJb%9-ExY3Bh30fZSAjWBGmseSUHZ(f!tM#&#JQZPbZCmx0Hh!0aCw6< zL8yi<9n!6lahnzr4@{xMPd7$#7|SQ!(s_E!w2)kBZWSr#;g+i+dM| zG=Di;uUe?376Y5pF$~_xijOlG?-Ju-$Gq8jWVN+39q~ zV-_rbrH<#Gj)LMYc!dx1gSV6Y<~Ir(>?TJg5aD7Y7E2hz9wxDhVQj~IZib|i<2Xl0 zN2OBfRevZpYPA~e_3Omo;fGSfl>?Zk@4r7e`TVGMrV6_pOvp(f!s#OxGg!iy?i1UX zU*}wbq~%~Rs8*}xa=D_3F6#CAWHQkp-Q#}J<&mUCgpXgJs}gZ?Dj_7{^o0a7Si+d@ z6Wf>vAvSJTAh`yuR*OqgSrgrLyIpmW=%bo!@qZv!2k)jaLdD6cB*`QY;XKVJW@3bq zFb_g3nJbXf>6FV8OQUMcpbvsTK~@q&?l-^Q1<9#|kQEIQ8<^Rc49tT7NWLL+F-}J&AJhQ!A42AI)xlUVq4ck>%#(m86@8m&=jleA82BFX;A`2-+7E+2Vq!d|5 jDar-pF8}}l|NjF3cn&( diff --git a/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/launch.imageset/launch1024.png b/TGPControlsDemo/TGPControlsDemo/Assets.xcassets/launch.imageset/launch1024.png index 0264bc268313a422f3b60031dd69385d858d5f56..5fdea49fc9004ed31729fa66f561839d3d279bb1 100644 GIT binary patch delta 4167 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 diff --git a/TGPControlsDemo/TGPControlsDemo/Base.lproj/Main.storyboard b/TGPControlsDemo/TGPControlsDemo/Base.lproj/Main.storyboard index ce318ba..5e30056 100755 --- a/TGPControlsDemo/TGPControlsDemo/Base.lproj/Main.storyboard +++ b/TGPControlsDemo/TGPControlsDemo/Base.lproj/Main.storyboard @@ -379,6 +379,12 @@ + + + + + +