From 9725adc7e81bb28c14a3afffc4a650599ef83888 Mon Sep 17 00:00:00 2001 From: Ivan Vorobei Date: Thu, 28 Nov 2019 22:22:19 +0300 Subject: [PATCH] Add preset `.exclamation` --- Assets/Readme/Miniature - Exclamation.svg | 10 ++ Assets/Sketch/Presets.sketch | Bin 22457 -> 30245 bytes Example/Controllers/ViewController.swift | 12 ++ Readme.md | 1 + SPAlert.podspec | 4 +- SPAlert.xcodeproj/project.pbxproj | 4 + Source/SPAlert/Models/SPAlertPreset.swift | 13 ++ .../Icons/SPAlertIconExclamationView.swift | 119 ++++++++++++++++++ 8 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 Assets/Readme/Miniature - Exclamation.svg create mode 100644 Source/SPAlert/Views/Icons/SPAlertIconExclamationView.swift diff --git a/Assets/Readme/Miniature - Exclamation.svg b/Assets/Readme/Miniature - Exclamation.svg new file mode 100644 index 0000000..ae0f531 --- /dev/null +++ b/Assets/Readme/Miniature - Exclamation.svg @@ -0,0 +1,10 @@ + + + + Miniature - Exclamation + Created with Sketch. + + + + + \ No newline at end of file diff --git a/Assets/Sketch/Presets.sketch b/Assets/Sketch/Presets.sketch index 9efc281c0d9d62c155b8caa380d4d2a0b82d9a12..768b0f9540f79f49df01c16e592493f9faf96623 100644 GIT binary patch literal 30245 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 z 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 CC%NnZ literal 22457 zcmbTdWq4e@vL$SH%*@Qp%nV7)%*@QpY{#)3Gc(&UGh@um%*@Q}>AdIO=ljl`GxKBo zSZZl+ZFOyxv{qF~Eid&23=IST0tNE-Z#wo#Odk{kWD5WS0uQVk+ZnmonAkcqSUTC+ zhQzJg1u~)aeHli-bvYM5J*ZxjRItp{Uyx5AbipG1;;7Uvo zHAvvm(8`Fbwrkuh{QSc76YHFcbC2-)lKk|eOMPSTO~B80ga(|k8q6A6)l}#JB55H}LdQ<4 zMc&?0o-u!_!mA4wj}rk;plF#X{P&#TNW|nXC-`Tmj>DgGgnCV5BzjD#DePtC9{?758iGzjx zA7!2U*f^1LR$k~Wr%mQY5D6iTHTia=YYp>j@wU9~&n-|7s+xN5)@V0UGPbdQz5~{4 z={0J}o6a;=bBkwUTeZAFg^@rA{Xcyl1;vU(lantyecXJX3?44h-3D(zQ$O!MO~uqU z8$4M-RiQ-=UsCGwiMA}w`xPQw=AACNzrIh)-98_mU7dAJm|=#hQQp?MZSp)FtPh*` z-MpSX4L%FXns#MQGFEQ*yxwjf?_0Y&dOG?F@P3@W?d<8@)|K_n-kW`<=xAr+Rq#Fg z`reJ6xgQS*$}-6L@?>_rKAh~-ZE*3w8M$7+5AUlyzCLd+*DSmbwg}v9w!b>N=QU(x zbO^SlWM_TY_bfQ(EnRvlNDWcYJpEc)n}yOu_%S>D}IE92a}vmg%qCjAZ(Bv9&v;dV6){ zQ_VIvn~ahbv`X%567Y2^uX=kF#N_XMewMKj)Xng2RT2~IdUAGWe>)rHy!7qF@@!Y$ z42fz{b#h*B>e3lIH#7PZ5hpMqE8yLZbMkz?_jIy*b^N&f5~|yqS~BAeFg2)4vy5yZ9Wq_p^pK;llUu5OnQfzdZr zXD#YwIPp5@<8r-8zpsU-y}9*v!j95xaHYD-ud#?~@x%G$*|1Qi7v8Ax;!NJ-Jn22k z)J(Iz^V-f2sp~mHxAVv=``~-s$yx7lASObzoPZv~3Fm>P{SQ?a_Qvf9nVg8-LI>?i zpZ#G;*6&4p0_|^4O}(@>!^?r>vJS)DT_ zHJZ;S@iJ^r$30v-)~?)+o3R~U?jG#Um%E2GABnnt*m`O2zW2VaE``B*71zD}+s}jX z`J)FDyc`T1or`qrf`WWJEiXoNSBLSlv)}Y&CniiWF9it*CjGS5TH4=l_S4X#eV?y) z``>OuqZhxvUg zGDa<8anI$JlnOLAmT96F6St;e>*yb+D=+%!gf>yhe(rqCOiXqLD&tGN$wAFGNDhc; z4sOdO-_A~|)jd*v;=Jab@o4d>ggu^yx^aTx3R+}u68dELXpRx!*D0{P^F&Q}wbc-f zB)^+*cUQ0x3Y77MN(X%n?VBW@p%dg17}2qV#(sidRPfI2}lclzDLyYh5xZtbz#PW-nTjbnu8TebMT6v=!v2|EIS zT_Bn3{N=kLV~3Q?BCn*(X=zg2s0w2wjPjAFUf(gBL#yiiKxJBYYwi+}@nV0a#h2nk zLd2>Pb4J2GJZbfDQ!~y@hVr%TTc@83h~F=lm*>~x2GU2!Mt&yOU7DE@Vqk1cV&2L% z8JUy1zdy)?RvmCM`ghoSunTsHww-RaFN(bkJV$zapml8hP_52E^?tq?XPEEK|FQ2X zUKzSOnqys&;8s}wX`)TFJ*uVYk~~tQl}<5l>^pfDj|3<}qJA|wn0&!c%Gw+Y#?#;; z3m1qO{AHrqUTxvPA=r}PQ+(2Q1h47ck(Q~0a5t}Ym=AJcw*+B(@$Oz*ZHX~!p5DXB zyYS6Qqu)aIFu5tiqcZUAo^Q z2ilwmmYfG3pWm#m>=!p$z2(+iO%`D>vTs>)@NziZomx*}`(=D)FWdQL`w8&c{wUI| zL=)^ZRsFM~HL&e=(2&M(8by(vzTq~_Y;TWN=O%)zV_uem^P9{0cz>0wx=iLKlL4Zi z!efd;xSd&o1P%i_O4n;_@~{!oA~&iMaD;bnnIc|arGihZXw*{HW*Co#ISKsFBa}Pc zo#vS|Bs$+qs!~Dw=hU5 z)s}N*EkMAYe8SLp#ARyI(g zJD320-y)~|mZ;_js-0|1n_GNAC_hv*&B3+r4>7c^vgEx6MUvv`JIG+wmlc`Yk#hMR zU!5+Jix^yI7szqIZ3=Po+@i`id9{qTywgvOOiFQ55ek0Bz3Fyml1?`)ID%gO=8-RL zODb?Gn++|4d8b`GI({{N=-m%>;gx#M?|G+~I$cLEpV&H^&tKxuEixhZW4Wr{ywv~r zC{rultI+I^tiMBa!kK&X!;Y!udC zE$$6&R?QU~znR#*oM_z?3-S5$V^?c4lbX|4;G^rX__miE<6Q2r>)pkcX5U3gg*r>8 zfl`bE7Ln08>g{z@L@6uM@$_r~HfxAgC--U(#P%a z^_l0*dn*%n(YtTR@kON9Po(PepE~|LTp|=|_bT?e$JC21TK8`-JwrVS&7oZr2{hza z+lgQTU)>+NLn&P7DL0#o4i^;Sr{~w^5l)j%=hRg6=-O&&KLTC*FQdKX8@`k_p5oPa zy3Q@^1S=iV=_;j#i&Pqgc~iwAPU1WZtrb%o47ddDPzjwnZvH&Q>21B|C$|jeqmM=G zCzmH7l-v_d#UQ`Q{VI?!6v~P8Z2yTMFqmOTZ~2qSL`*=r5(4o@lJwj@j#Bn!jE-U+ z;lg=b&F7*i^fhRI`KZ+Zn%yqZ8))!Wycm=NIT;CGa*ZNoWoeP6_G-w6!aR)Q2$h1h;j_>&_P421xR}|B+F#gc9Fhg}UvmX2_127Q|S6P6> zT-3_%EjrZ*@^{k`+KAS=6EtaL)>F7^VnIpd)hWywRfoNdSS;l4b9ocuXbCA;EI-;Z z^LaB#O*6}h63AJ;W9LT4xp41dk&;bPpEqu|ZfvfvaAtzUkbDOV{F*{GXrRX{ai{7^ zb`6lcwn3ApxcYGkC*T>y(Y_!JgDeC%S#laNNCws0bl7M(8z!s1QBDy7+ZLy$@!IEo z?`NkyC31use$5C0e20l&T80rZ7Cy&J)3nZSpES>-hZ_hUarY-NSZ8UQ#hmXTJMeE^ zkyqAq+AuFWXJQX3eJTkNyp1k~$S;ml#0o033w#NtXi}cj!GZ?;SHl1~F)NEq?tV5{OC zMeY7fH|Ao2MVUNhCZ2woTN)-FfkN#SkXfEiXM3q8!=#xUOx;ms%$CBaS8trq(# z71GH{d6w$W0N?#JMf!c{o-zbc1t4wdPeWUfI%O>8PjXj`&cvCAfiX?8;&; zIzvWT4_~qe84|+dH#8(*#hDgvgg=GzToj6Ba)K4(CFsM7`ydN*Ck&;Wq)6}?;Ms3< z8&<u9xoFC&uiyq*OfD@ z7qnDvc69D+PhO{daJ79JUMTfL7{#48W2P*v9F>|cy3zPCjVqvVc`v?kLL)ub3kddl z^GN32(k|T-7G;U?ywS2To{J50D%jpaDZw-J@F{3iln~Ib+mU!>uvvuMqMMFOi%m>mrrN1ezm_?(puqR=F{5im=w87 zQ*k!K$Fjv$+rZH>sdg0GQ;l7~RR;zeHOW5=h3UE+6qTNh`Ws_qS&iB_Nl;l^8h)8` z1?`E`rBwG<=oBhdUtk7`YNDC&x48mhx z*op`

Z4a?g5gXvw6`;cSTm*k5JQQ7?W|+gKT7OyJ!|MN1o{<_DgZ=<6PP?fHL;) z;v$b2H&5-}A{#6>`{vYQw=v0fO4GBmt0pkS;I;YN)J{;n3^Za_al@ymQ?Eo?D2%1> zX{<~XSGrgj6DX|W?(0AVm zl{22rO+Bzu{aNS|YqY|<;16Rj)E@}QkYM7z)-OW4Kn;2b^)atkV{aw(bx9T+p=x4i ziH!O<+Yv`+K`ygMuy_Uu)ix$xQhQeYN|fw9BRpcPFe}$C5!|E3^VOU8f-{{!`x1mm zC2Y1YA8?eZ@10jiZnQEm&K<$=eds2TZrtaIJ#YM#WT(Dvf!JpIjqsnc=0|1+g&(G@NF6LK3eR@gt4|XnT8!M9qDY zv#)kxYTPGVtg8!YnR;+qo>tJJU!KwE=S#w`hb7w7B*VB1-s4 z6OEe^<_cM4WtP0f1}-R#nURX%h;&1Y6anzZVdvV%t6>%{HmT`JmV9*xWwO`5*YWD` za8IBIHV_Pram-3-2m&3OCG#`L-0{+}WNI`>L{}o<;F4mwNg&x_dl)>Tkhx2XibkcF zOot3Cvy7x-V0#GYGV3QSmRRi?7zS6!?sC?Cl!`_f1*F7v9dsbYTWfG}COalG7VTGT zXg4xE5O2aAX1&CdpFQYCXdWp9HM0}wsVFs7-#6S0X$Frc7-(D>TTe83^V3VP)Skc$ zms#e$7*5$48D0s|)_F0eMpzyP!jxbsV6x~~LllP+E_u5s3Je|M!UTMcOWvPiL$Rje zIr5JFQ1uIlqkI83B%s|ZUsJ-Zjli3iIh@-XV_5j5)7_a@>Xn}|_^1|2E^}8VfeL@U zEF5i4q-AH)MzOsnZAqL87g}x{1#hkLGY5Lx07B&z6LaFuwbINF0hBjvq;7K=| z=T888RO3&u$#JAW_1xMs(U8!spu@?)Il~o2Tw}9-U$w1V3-I)2naT&n#Z-mv74F&N z_m@|WNQA^CpR%0rXA>dF9yeFGfTRD?#!zqB5-iZ%dP=*vx5nm^=p*A3z=uI756o=p zg$NcAL5qa~!1-~^kkCT_RuOX2kv2sXtJ4o$pg z*2_UJBY-SWfbD_2Y)-Yq@oX!9Vu}1Q>B`g;$L4~j;KfpN=OgEVtS4jXHV$o><>)50 zmrWqn|Jh63ZA42NWwF{gF!!;wwlHOUq%KNH`w@K|yhg!r z*xGE$Y&H@S?Y-c*5+HGWS;xYC#07`d*YSeVQ3~Hp)tChbeSU!(0r{Qn1jk@SL0*_t z5~VqtkwCD)&34C`hRHM@6>Jzuk4Cgu`g|QWm8rpv-WySy%Zz>8dLDCshED{JQ}Qr0 z=UTidT|%C^+#1C3QiK^4r^{$Lz8B9r_aSd2$lPrf;L+)j=u0(0>ZM9A?HqVAQnu)& z@&kJ4so){VvXfwnQWt598uMig!$KGXTX-yjC@~UdHE0|8exN?ULsgz9UVrBT7#k~$!9e-C7zCx8|Fp^Uk#+a^Q;M{%z? zD?6G|jdZP^&y%_EK>IV3u!6bFj@ zk%P6=@(Wr~f3Wt^KA1@JENF(U%pTtVF>*sRiwOdK38P+r+VJbOE{A73+)~3?;If}X ziVxh<>a;I|vX1kd)VXruJwl%INRQ14RlCBNFRvg?%)1(3`S9-Sr;o~dt_2rYY>@+4 zqt@tB8`V;=?l>kP~g$}|P3t*8i%=TBvR6Po0k3Z8TougrC%N}%Hwslr$NE9P$ZEv6g& z0wTUuiJm0~!muB~R=pduL5Np=-1Kl@lVytK4@ zMW7ipuW{3XnuwcenFAbhaCTZKItV6(ypux;NysvnI(Fwp2x6H+H*UXh2Zr3|`0Ia{ zY%kkxCRneldGK+>7fY~)KFaU=-8%8GpO$yN$5baQ zgc5;|Cue%q`jP*epOTpJ>sGxAd`j!lWunAa_GWZPM4Z^P9t9@#GtDt>8(4Hm_A-A9 zE)Vjjdaj(_JT@bOC^@Bfn0D!Vjtbh7TVQ88d7z^=Di`5t{dttp)vum?a5tgwjp3jusGZ(E9|9lwF8w@N? zq41=)oj6lp$Dl_RW~3t#SDbxJrAaO=bxSB+*)J6?KG2Ws3|AR>$Bl$4J-pQuC=pQa z3DlKPkJ+jV1y_mV3Z<*mv?dEEI~}T&@u`Gg*eEDf$L(Kne>M=#Qd)Fn=6%lz?6A}{ z8@|`3m%%Kwr7<^zhNUqOp7e?l3)iuOYQuvAjFdRI90i`XHJ<#gnT;Rq^ai#7sYk(3 z?g<>Jr!o*Gr~4fY-fHi>#y}@ z&$8JZ-3|I9(S@AtXc?(5vp#0HiJ|ZJK`r(KAhUVkaIJAI?yxc#0)0>p8lHy6oV&xw zrWcR@@so;^lnm>b^>C6Tbf12CmdqJa-usi9P}fv*3R_noW zPmI`o*h|Zw<;*JsBadNeQ`--gYDm8;~Cu4);rM4 za2J^qT82U#(2;`(@O%wm^5D2ryW=7DZS@m);ztiCuEF^glqiq`&Ca>}q>*6fbH%Hp z{^TPW-BQ)4ta(eRJgYGR4h8{J zB#uyg93Q#rDLJ<`$1L(h-SF=C-+Ir~9|ZmgxshFqgYwE!pVkwLCV|=w z<8;!!p8$ftS1u0WE<*|KMffRyU9(L&1KQgj^rNw+~_L1NeI zSu`{}(ID?&;QoP}HYz~$lYyf*=UW<CQS$p9njiEYgI z_CsHFeIv@`f>tM_*A<0_%rYO+N|n0C38IRxbk*GeSZ`HzqSBYmrahgCgHqC*1!%Rz z-Zi#qv2tF^2tNAi?%HQ%{Qz(b^`dWob6~L(RDCNnGOVZNQQHYs=V&R4`2<(3STZBH zw4XyYH?IjT=mi*^mNSj#3b$iXd#aETS+vbU27U4t!+I_~^-08wqZCulEpst&%LuwG zO`<)P%uC(bd%j$Z$>nyNnNPu2jpXV9s|@$qFP#e@12H$e{gJ`9Nqd@Du7~L5!9<8O zn39J$7S@BZwUTB39ceW|DgVHV%=#j|^@IjF*{MRxcl@jrfj5-Cfmx_u*ATfeJ%s-3 z5R`^!-w6DR%lBOytJB?oLE(86;+eJkCKEu8PUEj7a9NdqJ{xc1$t<)g??$)Z@%_xMaD~+Bw zR&YdWi{d)jwl7^Tk15t&(7)sMc#9t_1ux3x|EMttEh5#DBim+6UUu~>qc?npl)X!! zbA%_=und>3L>rg5e9Nwdv+N4`A~aeSO%1MJUGg)3cVB4Jgb*}fm?DJVqtSe<@mR~Y z`x#@--==lT@`7g3>*95;Uj5LJ0PQx%T&kas>Ok1w$&f%=DL$yQ!T67UH}ul$bwZM~ zcxf7iP`1)eyNt|6M?%R#06u9yls=`wZ<@{~kE@+mo6PUkSKoe_PmAl8&z>UBpnQML z`6}n#e-!2?AYJn5{`w*K@0-&%E)dk=z)k54V1foF7bg?Pf3}_Z$J$_mn9%&U)u_#6 zC1nj6OlLKZ<&PG0*vy3@-8FD-E*hj35kCY)FjtHmZxJ|pX6`PIo8Gs*1v3oEo>%FA z8P!==ei=mpjm(=Gx~xy~kY%-vNm9p7Q^}*VRAKGkw`*xQ#qLzye8r~w8V)fWLMkV; zh1zpxJJ6dsSr#W^k(B>+94(&O=YQ;`t9#)9kbs98xWN7;u#Jhc!9N0L#!FePF`@d$Ay@dOGvXkY&igk_qrZ=rs9O8r5X~V1TwuY=4qGVLq$1b z;Y(I&l$XnFn3H%~?LrJ264&N*s9$UIm6d70NNFAE-0t^Y7oulfsf@fx($x%8u6|sD zX>dcvX+Z?AV;GYLPVy*?&zGN$=I%IQ>TD(+Ta*vc5^@Jd(7};3%fT2of|eVjrPK~{ zt*4MZt7WiqS^dEG&_bq&T!@9qiTp_AGYSeoCc6en<$E4 zydFoRSIG_giXkU_IegPPgN%wH-y_P5wCtubkCfAJ^bPukNkBZo;;o7kB5F z|C;9@|8*Y5hcH|Tn-v5E?Qi;f2*c6D)xyNhiSfS*4EDBWplGb8V`1{LV(>6HFu*qO z65?MKK|sJJfMr`K2w=XsqW2s40qUeECIV79fp-k7d^J&*FqM%3p#hemKtMw+K!7t7 z1bFlY1P7QvK)&RFf_wpfg8sdh1NiT|U=ulC{<{of`?ujx4rc`j2#c@8S7Bv$(DO{l zcC>FdPZ1eGfr0+UNCZSgzrj#{iy@&QDNKUEz=Rt!MSOg?9byX!ON&GF!_j4W@eOM4&TA0&Kiv7JeYco@H+Iy2e3A$x00ayw1Khud`2X-U5?3$efBse?B!8g` zkilAf9*4JJJZ?wjD12Uumo!hnGE%=YkysR79H|+?a3XE;-f;ZtBTo^i(wX7gq;AlT zU+(kY)aQxu2`hv22|G@?Q1_%~9tcbVHCg?iBB*_zBDZ1pbRU>$M8G6hZg$-@1qMvs zhWxmZpZid1Dz{g;q>gi7<4{TcmIPLdWyntHTN)eQ9_2bQI~`YDeK=U3w}+9R&$rdD z_#cOIe`^Mhyl<1)Odp4ny%%mz*@6bZTIl-am7re_u!h*Sx$XB6d@bll;M!Gp;z#_& z3=$D9&PXhJnVxnRk|>7OjbT`iNY9^jgFE<>+sx`s4(zk{GlSIslY2O8Qt%D&(+=CV?obpf8)!O_D!W_;-@bAsXht9XdHsA?0J-D$MEG%t z2iobEX;j5}`#gA<9Z&G{bKCDJ+X?LH!zHR?0`KCMQGZMNaqi?nI;{@OTgy0-zJ1|J z&`llh(oyF=-YqS@wU^qq3PC#V7g4$dbr_T z|G!-PV~xyZZ`ueovnDK*4C`6pp%sm9NC2x@Gb`if@lWB)_Q)~v`x6{>(Cz{BZK@+ErI z8)l)xsgtc^FK$i+WBh;rPHJiYZVeb*%y|?!{j(>BoAbA4N=n^YBZyr(_IYpyPYIuUII#KPLJX@^3Imgv1(vN+~<^ zs#G-8?%_o4_whE<=>yqv)B|fokPHgMIwi0n2iI`$Dk3D*fP35p$PR(ImK;n6z`rX< z2nvwx_mS#--G5l?cB#AE>C^U$fM0T1w@6{Q7W?y6$N#Hk!&>j7Fm_E}2L}&TcsuL(9-55{}MjI;i|Bbr0+>sp zH+a7+7uQ-XR>rS*8wHw!O~~$SeFH!PN#Uz%N}|c1l{oSU=nU|nUI(bJ;=orA?mj~J z*HDSO0Ma?$DfGruNwqlaV#l>OUf;#x3SV{H)_rQ@7NZ3}%qv%^BXK!n*IHWEq5318 zilMykrp0cqDG66GsCe0DH>;uu1sS{^F0S8ajaRbM!B#mp+~c8hbbLM4HoQ{0ljyaK z_kJ(#HR<_{f6p}xfmx1n00D#%WEJqnJ`JD0dbQ!c>q4!uBVD4?ChHtzuOf;3 zFr zG5JVl;aDrH-n->v_3o8oT1CXJ>$Xw3N>zs^jd2z@_p+JS3+!~ z&UOR>KCDvOL&ac!2w8S4E3sLy7119EHSPPe2-sM&>tLqR*%zZG2N=}zW-bk6<85F? z(wR6c=0(OMN%WM@w}+1mWNdD~x=+~4=zUBpwQE?8EF}hm&31xO)t_fa;%Ucav%O27 z%U{jY>dHD)iaZW@AMbKBR5fO2XX`p;o~!_73M7k#Z&I_#BhF6w$yuFrze&Gy^Cbfz zkANh{qz{OS9;xhBNp>1OY^A609|aQewcrDH(Bn^GsCfjBZI_+##WMN~RwR4od%HM~ zs42JeY6`Dm=;zMqS24MhBNyw%ah6&wQ34x8)t2{il}gU@G>^l3Jiy~OF}`j;Jc$xZ zTni-=S@do&0np?~rD>+B!pZGxOzkkK18^LaF4Wi}f}s?%TaE2;frfrV020iICDg zH+wTk=%?O6W-eGEqBcb4e?HaOQ8k%Nfs`lFXk?Q{^)dV@K#eGPSB=J~%eS!Iyio|o zk-oR+%2|=b<$NTM&1Ij1MlZQ9(&j-q`?T6*rF5^dhu&;%0WNXjV)F zsw@csXa%3O)UqzM;xM1;wsd*XcA-4>p4M`Z!wzsBH zP-vHFEiT(!mvh0I<<3r2u|qe6@^SVtniuJ?{p4`m6W_HKlWPlX`b!>xs91u&-r9kt zsjS|%jy2_aUBdN%C9lhlbPukBE?&2b1U0cvn%2UEq%^QOGnDBMw#{VGPytG8FBTML zd?zyK0N|1C7TKBiA|lvvEwH;b+qYncq(p&JI)GV{!8Efi7@OPCg-#oNbn&xQi(lO@ zT5?{?`!QVJbu3lR_4k{X)A*i;2sOxYVheKf1>n4{e$Ln>SE_aZdKILoTTi9)WyVie z2Ew=R=2zCwFiAZSLW9IW$OHj>cbqBqzqU>jayn~fX7L;|pN0v$wmw~~!dyp@l#&6w z1Tia|M+<(&97%ZG12X6Q zAMvycTlITXtw~aYq;Ma`t~bY)=c4r9(jxTA!BogsS3gE8bQ}6^lu8|+`}vvcm#FR5 zW#6ps)Ng&Xs^u}5y6(i*j{Oy;xG?ZQZWiJKq}l6rF`b#GNu4C?`PLYj$A{V!z1=VB zHU1jU*&w-kCF~k?nuL!$5-V+j%B2S*iV+9EVlpH&oGyH4GYJ5oLHvZm%G?#vKb{#P zY-I>%TEf5-#_n?gOXIX-Xj*sGQg1n!%s%vjs+!k2H^*UmJ<5;nL0BJAem!#*Ev|k? znGWbq1s_Q}-Re))tyc!gQ7)Om_+9`DMzrMusO!qGDZzB`5gaXJbe#7l*P` zZxPRD24i&Qw9U~$_APt~_#S9L#oC-e##a5Fh-DQ+t8;(`%cIOe%w*FuFQ8vXYpC-A zS14ea-oyqZ>v*QFE$<@?$CBP1E+PuP5mj|?uw1NqZ+bjtR-;EGO0PC9W{s_$!BKx| zKxaJP4n5dT@ATh{lrd_J=oEniW@ao+af816otw2NQ@F_*tY#+s3CdN6X^zvaXW0+| z?nqDPO?p0mSSuK${+gIuU;$NK&)=OJTnlU%SI0@eegDLQrVDf2R|nE=IV&}%Ig&ge zGMz2fcKsqQgIhE-h$JjTotW3-2A9QX;8(RyRaa+__G+Wel5f}h=I2$1 z#FHI8w(Flj@O|4|Z;zWjhg^!EU_j$Ith)-=PX>5!`Ni0myoF_LPf>z#w5rQC;V_h6 zPKe`}J`8{)E(@qL6MJN`n#|%KE@4unqz@3kO*c_-mdLn0F~v_`92VQkgJn$ki!GJf zEg~?4!xwG(UykzvpiwDClJ$Jh%SVTIInzqB=(Xy3o;TuAgVC?s}d@88jqMON=*d5-vLz9EJKwj&{Qd&4i7v8BP6%7Ot#gp}p4N;L=2 zo37{gqOwPU=d28i>IPb0f6bc63qz-Q!@Brzh=6i1hTnbxckPF|!rT~-}f_S4%JWODF0f&l0-&s zH=E{{6H6h?#QLxS_Y{z$SKGaXdR@K-c01O{{=&o{pmNAlmTA+Co6-TOIADN(ERwv= z`^BitqV6?=X%Q40yrEdq;>(8T&#uk%U2dO2nLO9q#mAMs%$K&Rv21KOI?aef9n4X1Ns9T$W)q3H8u+o-=JlAI0iTzlpU9*l0`1yOzL^pg*BN)`vvO=ID!+?_ z>(umoRFcwq&~npWJQpi<_IDx}5a!3Poxmn)Q??=)1(F{(`~*j1w-_h6cH!#yopKUr zTwJeYGk_r+U@XR;!d&K|(QeaMFEP{J136AdZqMyU_lk>^$y&36NeLUk)j^LX)(hym-`7{YOyQlJ68M0{<;i%raBj%+uZgz_0=_8`2|7L#; z)&TfomfAbt@nTc9-M-&%5`DqXw+J{7+uwJbK0v_3lfNMqiy9iOY9|>@{=~ZSJ`jG# zcSs&a-OLdV8WXL2A5|UyOg-3@6KKR^qt&P_;IkJbM5w&C1PcQC$!F{7IK#n@=cG*$ zqdMaX*D&ZX?_?|)_OKWXNc1zJe^EjoGXVaSvyZJ_;Ok1WgORk6y~7D|%F7=#HHh&u zk_yCNv$3b1%57}U0I*W!5|a1V`(*n^`!p-Np%`KmbLQ^t-cTRf#UAi+wyG6={tKD# zoYXXbbTf#agc7Cwx=DeCy|~sMX|=TDa8{hZHmo@m(CeWpDYG;^(asUF4u~CdcuMC1 zbG_tg2x-z?_nav;psd(Y8=w-XmA*ryZfQ8&b_*&4@jspKeQfq%Q^_F6 z6le@{euH|U(3z6Hmpck)eK*8@J`o>&aV~Z~o^f2%SugN@hRHocUUbrAH{R)!U~${v zOd6<=&kbZ$(9IPIp}Q}R_k#LeVK$jXpH^^NmFc%kv-I)hPcqeH2Dj3|cy#Al3;G|a z42_;9F`!><+9}DWTA3To3MQH5QN)Tm=&-;lmGpDh94?UttUhqY@AFl!?ps}WT{8v%3F@0Z@E3l$vRVR<*Yy@NTY<22kHtoos8i_AK-45B^nJ?p zwwwVyzKm72)>OG}T(yn=0gqFZ=XqodWnO;pA^iBNnsvTZLrN9j^#SwAtMy)JciE{} z;#ioo+x+~s2VmA(dv=$T8aPd~5<@KN6HxM1Xb!QmW_KW50KI93My=9%q~hV8p1*!3 zTi}8ONy2|lc9{J)22C|abjy9O_4o?=&8l5`fz#pYE;E_Y($^eQP5S4XvMOsFe&*hy zd1U)07Epe}Vd%0;$T7zf;BRfY^pb`9}n&=m0G6w_X*E zR*SNhMTNsD%=spV6PW?L6vxw+DrFK)w(EOiXzo}U1r*{bOJ&lDoDPErqCPyc6eJ4D*E~=t|L4m4B z&vC~oX+flVva*ZCLUO_Y!H>7zo6?@WS%&7m);L9%;+A9~dMDJxv*$l2^A)GM-Qs_p z1R(QO3ke0`UR%af%E`8DiMKDgdt}^}swEFX3TCkgtLS|5&0J37HlHF2G$nAfhL1TJ zVbux1u%HD}=rF1vQAv<#sS|MEwHj@qhnFt4Qf&!6_7l~Nw|hc}_lNj2>b}byTjk~P z?N5-!dHeajo;U5G^2nliX*_Zf*Sn+uJr~KyG=l((F#2*057NOF#SJ)JMNSCR9=rsErqJ2u~g2x2%E>xt>5YjKz% zTG$s;5BO#`K~>XLSMkgP%lAi;>O8}&Udid~RZq?o4TzV}`DPiJ-bu95I@!wMR&rg> zd1lJg7^exF>i5XyYlGeVmVg2pUoXKjn#a)Pna0-{1nnjAr?cPz5eT?&CsBq74|T}9 zK3Wwhq*JyuvZx5sy2)i269)-=q}lvjYa6~}>d^%e;?k*XAOJ{8h>+MPJpWuW%cG;oFEHRYmUa7mRVnp#-swFjB~jie!y0uLVV3u*?cR@w3^ z5j2?1*yYz2SckjKyg36qm2jZ1D=XGBFXbIy2V-F2BqEn2(+l*`30ZA_PQ3UL;rtgX zfs(=keHyv;)ki^Z#;T5oG&~+>str+AT^J-PmC^*hyDiZfpdV8(^<4?W<$PuQG5YSC zgaM0I$lS;=W5-(@9bhT~p$9h0ImAS+CfP>E*YleD>A*20PIGBdU_X{&zJ&)l%vo@4n&>fn(x z>U9P(E_Y%8rnc07Ct>r=?!8Sbug;x@!V^;9a#%yLj}JRV;;_f@UN*=3_ezkIT#Ljb zKO8wkhlLZy>$H`BiV;LUu$ql007Fv{?RTZLRdHpNtu$LL?)Y;)hq_Qm0};u%0~RX< zCEho~l!k@Db+~);?RcNfFP5A?1L6LqihvYoXq0~wBn6kO&axxe8`OZ?(xT+wKh*PSo64yNi=5xV33Q zWvly2%gt*cG<;#>01kr&2UD#72hcc4=>VhH#ii9^|sDc&EBUZ_&G zx2k!fGb!Tq50pWP2`M3xkqA{A4I+5FM=tLF2_;D2-1MAPtEOAKNEfR8ygnoZdQxy6 z&xy$<6N`F~Cp|S}il$d|S+tWZEUu$dxszeOCF&Mx>GWcm zwnxT=v_5~?e(C$x0+7*MP8T8|KGv7m#P&1YTuoX!aU+AI|CuAeP<^Y*=}1~bn1pVH zg{bLd*7<8O?K+K0DcNC`S0x&?_SbMU>K(253fh<`JZ>6nFIOp`<9N1QC&pp7Ow#pn z6VW2a)gWUDgi*x~&-;WDb|$!yYSzPIZ3&krvar-kxhi^4~brVYmkHfHLt z{}{!V^EBAkJ5bXVNx5kUJ*Ts6ReR&`B9Is>#Lx4^*X#i9KIj0zU zu1ZhO8NGZ}^NW(r(nSx3?JTy(KN5HIf=MRwXx+6jET#5V?fbKUa4|a zcsHL764Hx*$7Dnj2U>)rx}MC|Q*;%kGRL#UlfyZwwbMk_O}1_lyA(1ac{5w72Y&Ts zTv9{B`FzLjThjYcY(=sl_J1&4?rvCHhdG&gCiJp7Clr4Ro9&}?7 zDKHEMO{%J2-rv{=HGUU`s9dyFCEIx&9KSo`zGUiL#Edd@oZTrcZ^-#N)k> z64-y+lK%4*l~1c$KUc%zq5OzLhW30wmQ!*RqoUlo@Sos!FzOT|PKB{@i{pOqq|ZyR zS+-AO$<3S;+a>t_C!X{CvPp8tXY3&cM4C{iZAYu^|LWvQz@co{e|%#nQc`wNlq{h# z5;Jzjnviv}#n`iyeGOR>2H8!rekA+8#TOs4t1$_KtYaS~W0~`gzH{ny`p*A4|CwvH z>wWM0+2*;Q=l7J1R}qtIinTVq$zgpqNp`6zqUE5Ly+dDkY=tXS;$;*D zKbd6_$Y;lvHs6;Xp)X(C69`0JEcUbg7Wod?eT5jFLSF#t3?pqWn-Zeim5iu*-0KUr`XubTqqV#|df_?KDn8wGbASx=?_P<9OG4P}ovR)zUVhQ8Z%U0bvh z=`IaM##MGF>{X}gi}VV50I2*-O*WF#ltoI9DLK>@%wJ;RDRbbqG+ZBT7YRS|w5)kh z!Nq%2lP=6#*+|#>(JVqDzfm!q@+WAK%xs(^s9y%J0S{}pMzVWn3ZTM#q^Bk^-q3c{ zK>(XCGN?9AG0)IaCTFXL}weRORD|cUhY%I#)b<U3>#;C^@4R#uT9?)`j2TWSa`yNm=>LP#_8o>}9AqY)9MUMwUM={u>aCiP~ z>Q*QFs|fu&#qde*F3uKU-*JO#5tUuM`k|W6wUao=3iso6X+B6MLZ3Cc+h8>?Acia> z`n0*8Bv`}LgqcXoqUAG`GCgTX<4+8}ObDfx(BjJf=>79 zu$D#C{9_IH%o$)>2bqD=($fhy8ay@|i_pi6MfEme$TK56Oc%)}DpHf@v)UXm;x>7K z#KRVpYi`4!9GF_FSyKWzEU)MHG?@UBO}nOcIgynwy2bd;7um(X+5Ubv_q7Dv(n)VFSY2Y%m9Y~rEgvB~@D@L}>>^i8 zr+h$=>fF0Lbf|{x)xKio&>(giyAKp>ppX-G?<({M(_JV0QED+5f2J6&uFw;M5gYz{ z+vSO)(qm^frOg2k;H;SIF$&)qiqX8;660p|FDnzXbslmewvG9-%4J5!7*aITzvzw` zNoLP5T=$?I7acxMD8oI_yD#zaV4@bk(7Onj^{<<=@mdzJKr~hVZQR=<28@FIAj)Xn zygAQc^#kwTeP$9aA*Y2?Iy=A$MEiW4MOOE@OgIH zfIl2I+)`e;Jv?*T-)ATJ%j$SnRpt%=ttGTL8YSFPTyX_?IOIDI(W51wmV~`a~ zvg-*?AV8UOfLLtNvdvJAl1)%|<^zg%;mE%InjRCtiK&U@?!($b$4Z(w&>s zB;ip>`8$sZao8TAS5?EAvP>I%gKeiWy*|aOJGaZEOnM}_lw2c<&DMgb#a^QT`I>}na zh!%a12lkc8jcW};j;M#_yDnC5Q?8V2vEn}mztFkD=rC|hzgYk3d7VZezq*>Tk{f^CDp#TEJ+H|Jhd!?#<_g@uuh-LJZ{H3rE~H7kG}pqTzjSMj zZeEEYg>F_J5=w2Raad#*a+l4~!6xALFfb8xKwU8WGV0popX!io3W0zVn3CunqP*u zn3Cd=-RHMG!NHoXE)`Y78m$5*Rd%UjP9lz8&t3Fg>Lx@1gf4E|!`4uqpn_r!7bHZo zvDKxOxD&R|Rv<=PZq+y%AuttrcH~YZQ&0AaX>c{o$KC9evstPbV3?cEd?0qRyPT>K z@_wUm4vnWpy3gQTTJCF#(7Z!=OBhfqId_jX%e#~`K3Kiv^Mca}cQ?Qqh?i(@ci&(D zXc&V@Hwi8POJXZ*SGeL{pFP-T+b*}m8V8?kVjHeP=)o-{G;b>4PX~uZpH?auVcs^W^wAts+^e1RNjD9^*wCPr zAC7EG7TK8xd`^nXE+{s5Syg?IzCiNNb7jbcA8jcn30UXQ zWKsAsztHAtoW$t&OXErs7lK2EP7eO=)DUIc8FO}sk-1CAQz?*!+@0z8Fod*rB@;o@aDaBP&*xHCe=j5C+zWpUd20-cB* z&v{sKl?P|$t*1d3WS@GZ=Tov(Z52~?wO8LWG@Tx|+4$hVH#g9i-T}nh&D~3N@67SX z<_11zj0w3qrM}jmnFp)^uN%e!n)-Ja_AXhpZg0WdzHUqh;pYa{SLBOw=`$$!yP>2- zh3hB+=+N-lBPYWlA*SIJac6m$vHjkg!~xY57}qIu`J_7>JSJ z?~~HC_V2VS&@Xpof9JR+A@m0y0$3Z7D%}1W7g|5(zfHe^9?oNm@leO<>7kA*VZiXFT7i!2_`rurqP1^kcn2c;9;! zIh>@NbsENAX6dtN0; z!lJ!sZ50XSB0HdB1FLic%o%^nrQf1VT>*YKoT(a`$&>{{$ATii0@E z(ZX`G5pfZcP2djBTY|MG*nP~6{OE?4>$`-(j<2>K-)cSHP*Di*yu{r`RWVR`HiK~A|&8V@_+K&lq&Kb z;quww^&WAw`cP&OTBKz-dMe*eFzd>Dt+_qGls+|NfenX?yPYmv# zH{QHO1P}EjUbL!-pm(*jpMP`=B%_Y~Grmo2kfjTV62cx06`8TiQVyvTo5 zg9(W2l;=zDO*)QnJV7zr)L>Nwm%V(?xW%Ql~my)~rlrf+kG-z*qbHz8)pwghmiX$k>7dfiDu!)sm@{S`K=y#ve-mClf&9^X5)EGfu9a>X6)k}8JCahzz-zhqc+&gm7x zDhhVH+;eh-3XRPytvdjiNU2wRlZ)sZ_3hu6T&zubv;v^TSQmhHxB;U6BNCD+U7aT% zMq6?JMPN=JEsK!q>IcsmNxF{jeMV|Y5d>0eElc?GMX8QbG}EFSu)@S;LN=OhFneww z09J>#?Ti*`!x2Cyz1mU%pjUsmtiSIL%T1NP;F}-S@zhh7&0MZu39Awj(D?(@yVf+T z^$Zs2^<(q?YUv%`Ht{n;iHiV_??(-PjVBfiG(*PL?Ns>pe)+MBr z^3Sgu9AxCSSrTAc5}oJ=sehFW5cg=$6Mj)Fpvx;3Abk#`a)kW_6#t~4go(%XUKsNc z=<=TmWB`tM>VigW`%hAT)yx23VphsW%KrLl79UVA_X{c(zv_@SoGEZXFbv37zOuTd#3N!e~SiMQ4VlY|hsdwM_zp*`FX4m-t>((Q#Z!)sY z=ysx0onQnNNwbq{W*z;~k>)z7Xok>l%w$S*WN+LNvp6=oa!l;;k>>w$E1+4-H5mw7 z)oJwbl%G7JC%dm?Sq@MiDXHo5wd8(xL>eyljk?MAtq`vDNdMbMoanB#i(g`}q)OQO zHVJ&uZ6=Y5IT{PbB;>_RK=c`N-AI!VVckj<8D$1V$p4>_y|h*Jk&Aw;uEVq-SBD*B za>?s=!{z37fV-{tzmmI)#=P-!@uu~dils!Fq~;H8#SBFE_gi1Nvjeq!cn%`~T6+Hp z>>e8YMOq>|(C-ku6b!J}BZy#?pmq4d81C(~EYU4POgQmz1S4ns3zb;)6zAvRSW^(l z!yBb6-OM4`8%0O#Rqr@N19W?nUQKq^9#!;c**E7Z$vqn-c*q*1wX(3$I!OO5 zb0C@+cHuEGZ2lz9XkSzk3cRxK3;>A;H2)%*LiG69OtuoIn=+h2SE@SfI}WFpxGJnOM9VumYm3~1g(F* z>lJo%imaNFmSU;=-4GoZ8IW=H_lL`pvRBARZ%2=RJ8Jf4(Vq`PB}se}jRrpc$D>hy zR{nD`+jr%HJU^ti{Veu#O4)ZY3?TNe1hapN{as2CN$lH$iSO45MmjJGQWnuM3gD>< KG}pv{^y?r0k=;rF diff --git a/Example/Controllers/ViewController.swift b/Example/Controllers/ViewController.swift index 629763c..814a985 100644 --- a/Example/Controllers/ViewController.swift +++ b/Example/Controllers/ViewController.swift @@ -10,6 +10,7 @@ class ViewController: UITableViewController { Alert(key: "Bookmark", preset: .bookmark, title: "Added to bookmark", subtitle: "See bookmarks screen"), Alert(key: "Moon", preset: .moon, title: "Night Mode", subtitle: "You can disable it in settings"), Alert(key: "Star", preset: .star, title: "Added to favorite", subtitle: nil), + Alert(key: "Exclamation", preset: .exclamation, title: "Oops", subtitle: "Something went wrong"), Alert(key: "Add", preset: .add, title: "Added to Folder", subtitle: nil), Alert(key: "Error", preset: .error, title: "Oops", subtitle: "Please try again later"), Alert(key: "Message", preset: nil, title: nil, subtitle: "Email required") @@ -46,6 +47,9 @@ class ViewController: UITableViewController { tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") } + /** + Show now. Call when tap on nav-bar item. + */ @objc func showAlert() { let alertData = data[selectedIndexPath.row] if let preset = alertData.preset { @@ -55,6 +59,14 @@ class ViewController: UITableViewController { } } + /** + Alert preview data. + + - parameter key: Visible ID in table view. + - parameter preset: Preset for `SPAlert`. + - parameter title: Title in `SPAlert`. Optional only for `.message` preset. + - parameter subtitle: Optional subtitle in `SPAlert`. + */ typealias Alert = (key: String, preset: SPAlertPreset?, title: String?, subtitle: String?) } diff --git a/Readme.md b/Readme.md index 0ad0cd1..a42beea 100644 --- a/Readme.md +++ b/Readme.md @@ -15,6 +15,7 @@ And other +

diff --git a/SPAlert.podspec b/SPAlert.podspec index f395849..8280a6b 100644 --- a/SPAlert.podspec +++ b/SPAlert.podspec @@ -1,8 +1,8 @@ Pod::Spec.new do |s| s.name = "SPAlert" - s.version = "2.0.6" - s.summary = "Native alert from Apple Music & Feedback. Contains Done, Heart & Message presets." + s.version = "2.0.8" + s.summary = "Native alert from Apple Music & Feedback. Contains Done, Heart & Message and other presets." s.homepage = "https://github.com/IvanVorobei/SPAlert" s.source = { :git => "https://github.com/IvanVorobei/SPAlert.git", :tag => s.version } s.license = { :type => "MIT", :file => "LICENSE" } diff --git a/SPAlert.xcodeproj/project.pbxproj b/SPAlert.xcodeproj/project.pbxproj index 15b791c..feb1b74 100644 --- a/SPAlert.xcodeproj/project.pbxproj +++ b/SPAlert.xcodeproj/project.pbxproj @@ -28,6 +28,7 @@ F4CA67B5238ABD0100E72F79 /* SPAlertIconAddView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4CA67B4238ABD0100E72F79 /* SPAlertIconAddView.swift */; }; F4D3CD58238DA9FE006C3DE2 /* SPAlertIconMoonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D3CD57238DA9FE006C3DE2 /* SPAlertIconMoonView.swift */; }; F4D3CD5A238DAA49006C3DE2 /* SPAlertIconStarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D3CD59238DAA49006C3DE2 /* SPAlertIconStarView.swift */; }; + F4E4459D2390524A0067FF5C /* SPAlertIconExclamationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4E4459C2390524A0067FF5C /* SPAlertIconExclamationView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -84,6 +85,7 @@ F4CA67B4238ABD0100E72F79 /* SPAlertIconAddView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SPAlertIconAddView.swift; sourceTree = ""; }; F4D3CD57238DA9FE006C3DE2 /* SPAlertIconMoonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SPAlertIconMoonView.swift; sourceTree = ""; }; F4D3CD59238DAA49006C3DE2 /* SPAlertIconStarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SPAlertIconStarView.swift; sourceTree = ""; }; + F4E4459C2390524A0067FF5C /* SPAlertIconExclamationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SPAlertIconExclamationView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -169,6 +171,7 @@ F4CA67B4238ABD0100E72F79 /* SPAlertIconAddView.swift */, F4D3CD57238DA9FE006C3DE2 /* SPAlertIconMoonView.swift */, F4D3CD59238DAA49006C3DE2 /* SPAlertIconStarView.swift */, + F4E4459C2390524A0067FF5C /* SPAlertIconExclamationView.swift */, ); path = Icons; sourceTree = ""; @@ -366,6 +369,7 @@ files = ( F412052A2382AF64009C2AC7 /* SPAlertHaptic.swift in Sources */, F41204EE2382AC9B009C2AC7 /* SPAlert.swift in Sources */, + F4E4459D2390524A0067FF5C /* SPAlertIconExclamationView.swift in Sources */, F41204EA2382AC9B009C2AC7 /* SPAlertPreset.swift in Sources */, F4A5A92C2388792F00B0DFE0 /* SPAlertIconBookmarkView.swift in Sources */, F41204EC2382AC9B009C2AC7 /* SPAlertIconDoneView.swift in Sources */, diff --git a/Source/SPAlert/Models/SPAlertPreset.swift b/Source/SPAlert/Models/SPAlertPreset.swift index e25df84..a042bd2 100644 --- a/Source/SPAlert/Models/SPAlertPreset.swift +++ b/Source/SPAlert/Models/SPAlertPreset.swift @@ -32,6 +32,7 @@ public enum SPAlertPreset { case bookmark case moon case star + case exclamation case add case error @@ -52,6 +53,8 @@ public enum SPAlertPreset { return SPAlertIconAddView() case .moon: return SPAlertIconMoonView() + case .exclamation: + return SPAlertIconExclamationView() case .star: return SPAlertIconStarView() case .error: @@ -80,6 +83,14 @@ public enum SPAlertPreset { layout.iconHeight = 77 layout.bottomIconSpace = 35 return layout + case .exclamation: + var layout = SPAlertLayout() + layout.topSpace = 46 + layout.bottomSpace = 33 + layout.iconWidth = 112 + layout.iconHeight = 90 + layout.bottomIconSpace = 31 + return layout case .doc: var layout = SPAlertLayout() layout.topSpace = 49 @@ -150,6 +161,8 @@ public enum SPAlertPreset { return .success case .moon: return .success + case .exclamation: + return .warning case .error: return .error } diff --git a/Source/SPAlert/Views/Icons/SPAlertIconExclamationView.swift b/Source/SPAlert/Views/Icons/SPAlertIconExclamationView.swift new file mode 100644 index 0000000..6f354b6 --- /dev/null +++ b/Source/SPAlert/Views/Icons/SPAlertIconExclamationView.swift @@ -0,0 +1,119 @@ +// The MIT License (MIT) +// Copyright © 2019 Ivan Vorobei (ivanvorobei@icloud.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +import UIKit + +public class SPAlertIconExclamationView: UIView { + + init() { + super.init(frame: .zero) + self.backgroundColor = .clear + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public override func draw(_ rect: CGRect) { + super.draw(rect) + ExclamationDraw.draw(frame: rect, resizing: .aspectFit, fillColor: self.tintColor) + } + + class ExclamationDraw: NSObject { + + @objc dynamic public class func draw(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 65, height: 65), resizing: ResizingBehavior = .aspectFit, fillColor: UIColor = UIColor(red: 0.349, green: 0.345, blue: 0.353, alpha: 1.000)) { + let context = UIGraphicsGetCurrentContext()! + context.saveGState() + let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 58, height: 52), target: targetFrame) + context.translateBy(x: resizedFrame.minX, y: resizedFrame.minY) + context.scaleBy(x: resizedFrame.width / 58, y: resizedFrame.height / 52) + let bezierPath = UIBezierPath() + bezierPath.move(to: CGPoint(x: 9.05, y: 50)) + bezierPath.addLine(to: CGPoint(x: 48.02, y: 50)) + bezierPath.addCurve(to: CGPoint(x: 54.07, y: 43.95), controlPoint1: CGPoint(x: 51.74, y: 50), controlPoint2: CGPoint(x: 54.07, y: 47.32)) + bezierPath.addCurve(to: CGPoint(x: 53.27, y: 40.97), controlPoint1: CGPoint(x: 54.07, y: 42.93), controlPoint2: CGPoint(x: 53.82, y: 41.91)) + bezierPath.addLine(to: CGPoint(x: 33.75, y: 6.05)) + bezierPath.addCurve(to: CGPoint(x: 28.55, y: 3), controlPoint1: CGPoint(x: 32.64, y: 4.04), controlPoint2: CGPoint(x: 30.58, y: 3)) + bezierPath.addCurve(to: CGPoint(x: 23.31, y: 6.05), controlPoint1: CGPoint(x: 26.49, y: 3), controlPoint2: CGPoint(x: 24.43, y: 4.04)) + bezierPath.addLine(to: CGPoint(x: 3.82, y: 41)) + bezierPath.addCurve(to: CGPoint(x: 3, y: 43.95), controlPoint1: CGPoint(x: 3.27, y: 41.94), controlPoint2: CGPoint(x: 3, y: 42.93)) + bezierPath.addCurve(to: CGPoint(x: 9.05, y: 50), controlPoint1: CGPoint(x: 3, y: 47.32), controlPoint2: CGPoint(x: 5.33, y: 50)) + bezierPath.close() + bezierPath.move(to: CGPoint(x: 28.55, y: 33.01)) + bezierPath.addCurve(to: CGPoint(x: 26.46, y: 30.93), controlPoint1: CGPoint(x: 27.23, y: 33.01), controlPoint2: CGPoint(x: 26.51, y: 32.27)) + bezierPath.addLine(to: CGPoint(x: 26.12, y: 18.67)) + bezierPath.addCurve(to: CGPoint(x: 28.52, y: 16.34), controlPoint1: CGPoint(x: 26.07, y: 17.34), controlPoint2: CGPoint(x: 27.11, y: 16.34)) + bezierPath.addCurve(to: CGPoint(x: 30.93, y: 18.7), controlPoint1: CGPoint(x: 29.91, y: 16.34), controlPoint2: CGPoint(x: 30.98, y: 17.36)) + bezierPath.addLine(to: CGPoint(x: 30.58, y: 30.93)) + bezierPath.addCurve(to: CGPoint(x: 28.55, y: 33.01), controlPoint1: CGPoint(x: 30.53, y: 32.29), controlPoint2: CGPoint(x: 29.79, y: 33.01)) + bezierPath.close() + bezierPath.move(to: CGPoint(x: 28.55, y: 42.16)) + bezierPath.addCurve(to: CGPoint(x: 25.77, y: 39.48), controlPoint1: CGPoint(x: 27.11, y: 42.16), controlPoint2: CGPoint(x: 25.77, y: 41.02)) + bezierPath.addCurve(to: CGPoint(x: 28.55, y: 36.81), controlPoint1: CGPoint(x: 25.77, y: 37.95), controlPoint2: CGPoint(x: 27.08, y: 36.81)) + bezierPath.addCurve(to: CGPoint(x: 31.32, y: 39.48), controlPoint1: CGPoint(x: 29.98, y: 36.81), controlPoint2: CGPoint(x: 31.32, y: 37.92)) + bezierPath.addCurve(to: CGPoint(x: 28.55, y: 42.16), controlPoint1: CGPoint(x: 31.32, y: 41.05), controlPoint2: CGPoint(x: 29.96, y: 42.16)) + bezierPath.close() + fillColor.setFill() + bezierPath.fill() + context.restoreGState() + } + + @objc(StyleKitNameResizingBehavior) + public enum ResizingBehavior: Int { + + case aspectFit + case aspectFill + case stretch + case center + + public func apply(rect: CGRect, target: CGRect) -> CGRect { + if rect == target || target == CGRect.zero { + return rect + } + + var scales = CGSize.zero + scales.width = abs(target.width / rect.width) + scales.height = abs(target.height / rect.height) + + switch self { + case .aspectFit: + scales.width = min(scales.width, scales.height) + scales.height = scales.width + case .aspectFill: + scales.width = max(scales.width, scales.height) + scales.height = scales.width + case .stretch: + break + case .center: + scales.width = 1 + scales.height = 1 + } + + var result = rect.standardized + result.size.width *= scales.width + result.size.height *= scales.height + result.origin.x = target.minX + (target.width - result.width) / 2 + result.origin.y = target.minY + (target.height - result.height) / 2 + return result + } + } + } +}