From f5b23849648c37d31e87ce0cf99bb70665fafbd9 Mon Sep 17 00:00:00 2001 From: nelanelanela Date: Wed, 15 Oct 2014 15:21:21 +0100 Subject: [PATCH] Preview view addition initialiser parameters optional. --- README.md | 2 +- camera.xcodeproj/project.pbxproj | 21 +-------- .../xcshareddata/camera.xccheckout | 41 ++++++++++++++++++ .../UserInterfaceState.xcuserstate | Bin 64976 -> 43904 bytes camera/CameraManager.swift | 37 ++++++++-------- camera/ViewController.swift | 8 +++- 6 files changed, 67 insertions(+), 42 deletions(-) create mode 100644 camera.xcodeproj/project.xcworkspace/xcshareddata/camera.xccheckout diff --git a/README.md b/README.md index a145d4d..e2b784d 100755 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ V1.0.0 (10-Oct-2014) ####About -This is a simple class to provide all the configurations you need to create custom camera view in your app. +This is a simple class to provide all the configurations and you need to create custom camera view in your app. Just drag, drop and use. ####How to use diff --git a/camera.xcodeproj/project.pbxproj b/camera.xcodeproj/project.pbxproj index e0c46e3..40eaa43 100644 --- a/camera.xcodeproj/project.pbxproj +++ b/camera.xcodeproj/project.pbxproj @@ -23,8 +23,6 @@ 454C1F4B19E82E2500C81915 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 454C1F4D19E82E2500C81915 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 454C1F5019E82E2500C81915 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - 454C1F5B19E82E2500C81915 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 454C1F5C19E82E2500C81915 /* cameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = cameraTests.swift; sourceTree = ""; }; 454C1F6619E8316A00C81915 /* CameraManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CameraManager.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -43,7 +41,6 @@ isa = PBXGroup; children = ( 454C1F4319E82E2500C81915 /* camera */, - 454C1F5919E82E2500C81915 /* cameraTests */, 454C1F4219E82E2500C81915 /* Products */, ); sourceTree = ""; @@ -78,23 +75,6 @@ name = "Supporting Files"; sourceTree = ""; }; - 454C1F5919E82E2500C81915 /* cameraTests */ = { - isa = PBXGroup; - children = ( - 454C1F5C19E82E2500C81915 /* cameraTests.swift */, - 454C1F5A19E82E2500C81915 /* Supporting Files */, - ); - path = cameraTests; - sourceTree = ""; - }; - 454C1F5A19E82E2500C81915 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 454C1F5B19E82E2500C81915 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -314,6 +294,7 @@ 454C1F6219E82E2500C81915 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/camera.xcodeproj/project.xcworkspace/xcshareddata/camera.xccheckout b/camera.xcodeproj/project.xcworkspace/xcshareddata/camera.xccheckout new file mode 100644 index 0000000..eac38a0 --- /dev/null +++ b/camera.xcodeproj/project.xcworkspace/xcshareddata/camera.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + B6656DA7-2538-41EB-B435-476DC073ECE9 + IDESourceControlProjectName + camera + IDESourceControlProjectOriginsDictionary + + E1D0A3AE6B49B031DF6A25973E5414F28D2A575A + https://github.com/imaginary-cloud/CameraManager.git + + IDESourceControlProjectPath + camera.xcodeproj + IDESourceControlProjectRelativeInstallPathDictionary + + E1D0A3AE6B49B031DF6A25973E5414F28D2A575A + ../.. + + IDESourceControlProjectURL + https://github.com/imaginary-cloud/CameraManager.git + IDESourceControlProjectVersion + 111 + IDESourceControlProjectWCCIdentifier + E1D0A3AE6B49B031DF6A25973E5414F28D2A575A + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + E1D0A3AE6B49B031DF6A25973E5414F28D2A575A + IDESourceControlWCCName + camera + + + + diff --git a/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate b/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate index 9307480959bad182d78b222575623e1bde3e3e62..edc8bddb9e27daa5fb706de405846c8435042aeb 100644 GIT binary patch delta 20474 zcmaL92Ut``)IYp4x9r}#l%*`a_l{KEU6GEUR4EFGh=PhDAYeh%yIHA9xw<-z&LQWVEhJ+DeOehEo!jiBj90(7>lL#bw5J5ywB7%q|l87`S zlNd{s6BR@yF^;Grs)-t6JTZZoNK7JX2`w>$XwVWJ#B5>?v4B`YtR~hFpAnmh9mH;8 z53!FpKpY{?5kC;;iL1nq#4X}Bai92|ctAWQo)dqQ6iJg(QbsZ)OInfEqz!3H+L898 z1L;b-k?y27=}(4`p`?b4B%{b^GM<=ECXoHe{$v`NPG*n;$V{@7)Q%>{kY(gpvYf0S zE6H(W6*-=qMAnhhNJKV}ZR9+1KDmHgL9Qgb$PMI1aud0e+(qstzaaOL=gAA?Me-7P znY=^@)7x%d_w*~{!P9lUr{7QQ8Xo`NKY8$Fxm>G|{`dMUkvUPZ5^*VCKmt@I9h7yTu@mp(urqL0$Y>67$n`g{63eTlwG z|3u%U@6bQfztIoq$F%k-{TKa$eo4Qf-%FvClFFoVsgcw~YA&^u+DPrCPEuE?htyl@ zCk>PaOT(nSq#9`-X|yy>+E?07nj%e?W=eCUxzfSXLg_GRiFA~7jI>-jPFf?KD4i^w zD&?dzr1jD!X{)qD+9{nUT_{~5T`ujCu91Ew-6-9nm2Q{rlzt)oO1fYAwe*PenDkre zcha-cAEXzhSESdZH>9_v_oTl{f0sUz{vrKS`nU97>1*jb8IX}Osf?8w$`mp)nT5<+ zW+!u$xyamQUNT=CuOOp+dWy=Q1@?}G0MY3YqNZDwa zcC4&YRxO(#tCdZWX=T%8vt*637FoM&j%==Mfo!pCnQWzOwQQYigKV>Go9uJhZrL8$ zKG{LpVc9pb6S7mXGqQ8C3$n|yA7$5Nw`6x^zsT;(9?G7`p2?oe{*k?sy=5c}!O#rD z7%;|+DWhbp7+c1Hac0~YPsT^f_%l725GI^aF};~cCWeV;5}E!?DwDxvF$0-ArhpmB z3};3#rA!%9!BjEhnMq6?GmSyaOs0WpX4;t94A0DG7BNeiE@myWoB4{_%N%6BW{xu7 zFyAsKnKR5;<~(zOxy9UO?l57X!*m>-H zb`iUbUCFLt*RxyMZR~dTID3NqmOaUyV!vZgvuD_|?Dy~r>S_67S7`!D-aPRL0)C8y;Ixry9VZYH;vJIEd7u5wR#PkAr7O0Je`qGCJYJq8&ynZJ^W}y77Fiz%hVhSOGYvoyXTw2`#y?YbPGcH@3HJkc6@dW=6mT{O z4CMy#Hu8r`^PJL>iLn*sHB}X5WhGSs)e}oc)bJJt=|Rs#Sa zAh-cs4wuX2UjQ_aV%dv;0c>7UaY=bi>4?&js_dll;*v?&;w&z^Q1O2{K>^Q8=14k$ z5isU&7B~{CfP%kX;H=fF1g4Tiz;XkzOR{r@7mY2cDpE+g+pKhLc^|dubV*hN`&E+F zl6e<^qeKpzfHQCbuKC3k!^e-smSqn}&aEjOTT)$9G`5l};D&ILLPhq7(y|hDU|?W& zbxBoqU^zcj8_aJjHfKcZJb)+PXNU#1&WrCo#GV8`z?Ux=;zt5M$vphQ*LcXMGt56N z_R)eKxceaB3POPMz|_ouVMWy?`S^ELNm)@%>4Xwa!VTvN#2&&y&+ODpY}+c(OEORV zcwWL{1!~E$E}-E`xcowevaYU&Fj;<1bwNQr@yDLM!lzEX2qHlgh{n7zxU)DAU#Kvx zs;Jn4rRP21RyrY-%GnG)yZQ-dq8 z$*Fjw=3boCK#h#LdJJq4(Dr z@V&&V3!LSqcY$-<4E~$pVG3{wToH(uxmjJ{Dp$|Ti&M!2}IKoe*R&7e8Qb91?Q z+U(Xbx?lEw_kUg1cSFE#+45gGZbTgKoHE=*}(X^79fhEBwoQ`R7f{ z8CYC0qG)_sjoxF>2l`>>KwoZI7xd?r^Ccq#ykIcwDe+nZLtrQjgW=ptu8Uj6tzH9r zK^0U(4Y!6{%dO+q^G8Qc(84&On|SUs+)Yewo_|O$|C%0E-RhHIKZ)1Mm0ZY2sSZb0n@fM+R|6`L&}t2e?RbY~_c@flJ|X zVYZfW*oGC{aek3G3 zB}v3~hZHJI@YbWcqO2sLRH#EKxEgl%a1?$chC?^u1U&g+K&QC#T!`r8Gs2M0!tc2Y z+~xm8@Yes}y~ADPuHe!WH74p4&R^goiPt*# zEBp=Khrh!I@FDjjca8gryUyLdD2XQ_m3VT$a!uIp!kS=8IO9#s!&QVU{_u!<$c3bLb9fQHn1k@f4UYv5XBvNc$UWqHR=80CVt!s~W>(R#%$kbIYP^AqE-M{bE^H+^2?C6Q)a^Wog~THMP?fnCu~^tZC{i=i zi>iu7Ruxr_%B-m^E4fH4C6*D(vCb95N}`Kc#lNX?3j=Zl3~+P>B#$3nT3pn(stE6x zvy()PYl(F^shJ7*v0)XlRx(c{t|vC|ldA2g)x<_(6F;FkR6%UPO1Bc*KpL?f@9EO` zz11#SU@WqKPVB_S>-OQ9C0Nfc$-Iy7d7XE^Af_TF0^9c)w^t>_@;% z)OC>f8rPE4%#`spMZ?NUx|Oab4iSfiF@My==haw;5l0DJOxD6T#4+MHPQ$m{Z3L7E zZ{hB8ch(Z8aC!A4&Jbr2u*BJyf`9`8PW+ad1TAraz?G$oxQKvN7jYQ@>;JzTyhdCX zV*e)uY`TaW2-tEV`Qo!e7T)DocTe~o;%6bz?h^M9utWG60e`%!`)G&L@nZ>(Zjpz? zL(+&eCKU*HA>fUG4+6dj_^l;PNi&J7 z#Fex_z#oAC{K$wiC7Azi!X+)~NV=>dok&~(0}<$fK#;xy=?CQG?(P(%n?KTn^c?(Q z_HZ<;#uP8z!v+SrI#2rG4Hb#|4B>)5+8_W|GEnlG3?hSth!5im5eP*fs!$O$h=e}9+E>^;AP|8)*!@Ik-rbfgwnYkU{2!Ad z_-AFV-IbcmB8N!4HjvryEjf@JMCOutWIj2VEI|120Z&pq0tpE8MIaG@Bn0{)(0>D- zu%ToTISl_UCQI|cHs6e0+fpG{_ttEdZe<6P*ep~V!Ho$1fZ%oBXWDBo@+tWz zo*nWT0ySOaUkFUVtLcB+Qu1G6TZ+JVK2@9TLB1y6OT1Q-Z^*agI|L>oFbRR$)s%z+ z6hvS$0#gu}%AeGh8Bj7jdWu1y4)0-OxQIl`h;-?qj1idD9Zi&}E`ao5LMbUrYzT$R z0oO%YAu#!~WLnyR73QxhmWtxFNW>9QPw6$s$$?^;LIQj>KXokWNbScTwcxE=}r z&+zZee$rA6k{R1f07*4cO;j`0LbXzDR6Er{&8Fs1ofJ>arRGudsRh(RY7w=VT0$+Q zmQl;871THu|+`kFdK9j1;@+N0Dr)G_Kfb%OeqI!T?PzN1c4XQ;E(_tZJ+2kJa^ zfx1XtqApWcsH@bE)HUiS>N<6Ux=G!lZc}%tyVO1EXX+Q~SL!$FKJ`2GfO<$hq8?LE zs6VKu)HCW&>M!a!^*8l``iJ_LdP%*aUQ=(Vx70i8JuRUD4Yf2ulQc!sw3L?749(JV z+JH8sjc8+9L7UK~v>9zqD`^YblD49)X&c&>wxjK72ilQ#qMd0M+Ld;r-DwZnllG#$ zX&>5`_M`pj06LKFK?l*nbO;?vhtc75Pr4VaqSds9?oCI~edtI!ijJnWF?1{)N5|6% zbYD7=PNMtK{pn;ng-)f@=yW=R9zbW(S#&m?Ll2|}(YbUUolg&@3+N$qAw85XqKDDL z>0-Ks9zlr@HGO55IBs$5d@AR@C^dT za7{aozzGDtMc^a?rx5rKfzt?_LEtO`-y?7ifgcb!kH7^4aQa9s)lj@CyRJBJdjmxPbnSzykyxBJc=-#|S(@;12|z zY7xNo^G^hD{d|tV-w3=w;2#A3Mc^d@uMl{Rz#9bKBJd7@_XtW51PJ0sb^<{XK?*?{ zK`DYV1Q`Tb1my@CAZUo75rW1DDiAb5&=f&41kDjtB4~l2C4yE6S|ezKc*{x~T-V(Y zbVtwwK~Ds|5cEdS2SHy1{Sfp=FaW_o1bZMDgkUg&Aqa*d7=~atf;|!Jg`f&SHG&!h zdm|WuU>^h{5sX4G8o?L@V-bu)Fdo4K1p6YGh+qj7sBUpprcmyXPI1xeZBm`>_oQz-{f>RKjir_R% zMUX?dWWnhO&OmS`g0m2;N3a3GMg*G>Y(}sJ!Bzy@5Nt=V1Hst{&OxvfK_0=m2+l)r zK7tDnT!`Qz1Q#Q?1i_^UE<nVIwP2 zaGsI;xJF+Q;bg;lZQMkJGmhlXHR?6tv?KYKjR9gC&OMS3Yzh+*PC$|`Yw{Nn&O(y! zYDy3hPDPUcqbXEGI3Mw2X>%_F-8gVkl7$L)zN^`qZ)i3aS#W}q{PN~t5#cN)`K!%7 zBEp$U@@$KKs5o6oUels?1I}5JAKKy~a^l1lkc~;&z|{Bw-Co66O!B}%KO~&WB!8nt zKO~&bSi-?Wl*dU;^3kn+BEp$X^2=JS__kJ=NWm#CP@Kep;5^3zao|_BD)}3&1|kd2 zdF;(r8xi5e$LbyRGl8?8fOgTI=XG9@{#Fg2|(J?VpCE&{*zY;n@1?gHBGqSx#tpxLuMMa{kf`g*p$EkHnz zX4{EvK>||D5hqO=Dxf*8wthMrdSZm%yZvWF+JLzD0fh-k$sdeR3j$4Z^xlcUsMAe9 z@+hI{>Kwfdu>z8I>iv))Aa$qSh9m(E=@fHFnk=B^&Ir-IGy#3zsn;?-!rdpfp~L2x-26Ch&T>Ap%<4-Bu)^)4aaFVgdczjYbM+oQK}d(E=JcSIk7|SOMMk za1t%66wto89%3j|V^pZH=MT=c`}z8CSRf$ITb~|_1vF}bm)P?%0WDnM-a{8E zD={imSb_AS;bV$M>H;=>Kw4aOY*yjN$+TJ!dbmK$Q|USZ*)P<0wn0D{3&qkR-7KJn zh5FpsCZP8|dP6=J&~FR%bF^DPHjDIT?GaGFMPjx~_X((Okv{Sd3TXYJ7;ylH1r+J0 zN8bpj_hNkyCj>NZv9-u~N#dWq!Pfsby8~I!pz*vtoW4fIl6_L3Kh=$9e*2(nCztFkEZXgt|^l53U=x2 zqWSoxHsYlJ@+tjRfLKMPcq@eqc%Vk)!uu(#I0{R9@J`F@MIzo?VPdF`Sia0e94Fpp zVYzT~{&tWF9~F$N%Q8oi9q+rkb#yM*XCK~zeafA>T+fa7WSCp9*MncaT%YoIe@61g zK|OQ|WfC1rh>oQ)NFfpl9Wh)-EM8%zGfGAaa@rMrMZ^f`?20f^z(6O^OD7PzQYo?+ z3oIEcV?-8H9ZRslVw;^hAT2q$FgYzPJyY*?nNrs-cnAAdEb=ld9W9hE?+P?YNRICN zf!S76t>n2be^I@Ijx`*!dhxfrL_f-$1-5PL?D*SZG;h1gN@R7@u?F$cDr?+eXcL{8 zQrJH}cOWjY-Ntz8Sc3H|G{1C}g(&NzYw-KfaDA0n4P^d8SJ7c1;?R2t$XR2~&kpkw z1w(X#fqFqPx@F-48wgJng;WB{=tjK-)D<2fibv|i#eOT-F#N$ahN4i6$mYTqtdjC? z)|iXbc!4So+>meYDb^-gqE3m=2ji!#H4@qT3+%Ug#)>FaKp88|d4)>Br}lCXEy&Ob z3ofza->g-bCdCYh9+2DZuq;7F7_dU+$S+=}H*TOn-L_6G>dh0-vvos7eFZvwDy+|! zZ}?0cFab_z=6eC~Qfe&`;Ow_a~8Dj1Nf^ z+^UbGRXUyh#o<5Rs?V9Vm|CdF!k$v|iQB}wCtI&0ChLeBx9Ka!CP7}X``ktcp4_e< z%~pZxu)VM7lpP-nZdZ!LT{>bE))vaY+iolpztj=4bdFBlp)V!OkR+=cItfC5mou*{QFa zr$rtW-(weLnUI|to0XK7+8ssT<3?dk$cPWe?fSGiFGzGn2JnXx?8Kp5`iSjZH`~>2 z#piZOO$Q`J$9&iu%6<}>oD<#nrC-STlHK|syQ$X#BJB96M5E3`eHpqVa_h^`&jK2k zm@JOzHvtL7pt6q~3sG33xVe`-5L%3r(nP+;0z&=#`1fDR`SdUKk^fYnI`!+#Z~anS ztYm+Qlw48jg(#IFj`Af&g^EFV8tnL${VaIn{^DLj_C{cf>aQ1iFQBgeDLNGl6cE_r zsFS$)l^E*`rK9c?sD{`i1>bA0p{^4~hFkvYM9x1=vEgqfi}o^d+}N3tFKRZ@fjB;I zpQT7J5tQ!OC@2-=#GGf$1*%g&A52m5=KIAh0b_}&g^D=-&i+7t)P8a0VQh57L>+PO zesMi!>;?Io`=dnjoOCSV0*ggz8m>3--HRUMs%z@0lU{m2F52WFNN+n(C`x)KOHezM_h5xNaPIE5qs;1PY#NEBqmr;_Woe3$P%Vw>7!#gmmwF4y>!G3 zKI%{af8uL#2hM18M756SaY%eJX8H)qA`V50c18>6hXHC)OPo$1Oc3~=qwK3|3fJjU zAJ&hupCFxbxTh$cqGJi+(+}J8n-7aY%%lq}XAXZqL=$U7o>UP{6wuidQGCzi zVliPR3zQXu(!@@uVkE@!4=0lNzmJRMlHmjv;}c@CFf#;Hc_K$tSTCTnCo)CxCY^Yi zAg;{J8W5Y_y__?xx|UR(V#j=$DBK|k2j+{5Gt(&`-;?4Vo|z}0@h8JY&V?9t4pu9e z#rl_L_?#%Sj9JbP9_&mqE0~o$8XQ^9tYTJwawvgW$85o0(lehi>zNJAMrISU8Np2m zZb5Jxf;$l0iQw*a%vNR_vz^(&e9mC}C4&19{2IZd2%bdn%qOo?m_54JDR47BCaOP@ zW^VP-dmrY2*uJ&U1Qhe=tmn=rr}_Xh@Zt0)b3|m=&PScj`Ivq}q<_A15#}Cq|Nm6^JM#dme1zbBgpU?sl?OS#;GDNF^C$Dq|0(b<^AZcZ zM(_}VhXsKn{1@k3gIK`Qn4g6#!ICV6;5P^!L-06)C)Ti1=CvsEEoRrr;1^EUht+BC z$Be71Rp@PGOwgcMwPLL$o~$i`rx5&35I-#rdrQV}nK>SIC_YUSqzdUd6@Ts# z9E{IE2dlbI*09bjekb<-u*=kw^}?Ec5Il?U87Qpz9B+5t*Ng4J2IF^NY!HIyyVwu} zFMbj@Y%g)TF5ok4C0bU)#t27}{$FPY*;w)HAlsM4Ul?B!4-X=E8R0`!A-XrmY=8Vl zN<2W=?TR!OpUC;|v>@(YJb1}wvw3(pADtMq5swVA`Rrh}fW_Y@Uq$do1g|0Z6R*AC zkjf4hlDB6d29zj^)@!QT+Pk01`W z#|S>*n=f`~*|tyKl(VzhPQe!Z_4DstEdKf#AHBloXi6qk3MXialWI!FCdE~YZd<@E z#9ur=)E$Cg7qd(7>1yFD47>D`vk&a@Pdn&hSA8^kcZr-`%dY!~f(aW~e59|7-H71R zE*4jrXZ(Rn4ujbp>^_O<2KIAyC%cQ?&3?gt$?jplV)r8W7lO|b{2Rd+2>yfMzX-lW z@D+luH?aHh0T28Nn?1xHW{cL=^mgk-1cvL$e5FR?iBSF@Md zE9_N7Kt$kkP~>X%8v7G4MFfQiS8gCb;YxW5dsi}JEqjmsnf-n2(5CU-CRaMC5NsHSK&CV5Ea z;p0>S(g(QQOCBi1=0mxU+?RbU_m>Cg#*RC*!^1~}Jt7>|$$LN~50-~O;oS(~$elri z6Czyj;ZeLy6e?Ws35jU@-g!c4O)WqAsu{oVdV^LTfvxHzj}%V*3wI5K;=6IuaI@Qp za273$mdA+3l&q3ROXdy9swgh1btxT3tzF5^yHbRDE%VnEnhh#_a{ioxyZ)Mt3veUA&_!884*+tp! z`0CSR*&q1w(_gX|vX`>gvUm9U6J(6=b*Dh45Z_+v!Ylh><{a}ozIFugr6X6?o%LkB zSzmnJD3A?eL-2*8o@_F{Zj{arz*mlP*ghB8Ce(7>>lVY=Zc!*PZ+ zh7$}Y8O}1CYdGIK(5(u_)ss*LK4rW$FDkkJgIR-<;K*+!j4bB*R3?J&A(^sBLvv8A!Av72##ajbEU zaf#M=lJQ*Q`Nj*47aK1%UT%EO_($X0#&?Z>HvZN4zVY7*iGo(h6s*EP;i_;~1SnDz z0~F&F(-fRyx?-lHMbV~MtXQg8u2`w~OtD?DTX95jR&iBvO>tdu(_e>2;txcUx{Y?W+gG@tAdz)%wO#7OqnC6(~n&z7pn2tBCH(g@7+w`32 zdDDxgmrbvlJ~Mq~2Fwi2dYJV#>thyW7GoA?mSC1|R$x|WR%ABZti-I`Y`ob-vs$w{ zv#DmyX02xJX0y$fnXNGEGFxr7-RyI-U1ndH9WXm(cG~Q$**UY{%^sRPHv7Zunb|9| zw`T9P=D?ga4>ebr4>vC}?=)Xve!%>c`S<2Om|rlzYJSc9y7^7>N9NDW-zf%Kge?$`i_y%I}nCl;10_D(@;ET1YIQ z1!+NB$Shb3GYcyV8w)!N2Mb?|0E-?LAr@g4JuQ+ghFerxR9lRP9BZl@((pw=%Rcwlc9Yvr<}FT3K5qSY=ub zwHjtsY&F7al+|dfGOJpvI;*KxS}SBV!)lgQgVk!QudUu%n^^a>PPfjr9&A0tdZ_gn z>uPJxdWQ8Z>qhHl>sI{z+z#u5)+ek_T5G?vK4bm8^;PR@*4M3XTHm(5YyH^zrHz@5 z+9uW}!zRzBz^2fq$fnGu)@HIzoy}C6PMf(l^KBN|EVfx{v({#_%~qT3HlN$#X z)aIDY37a2nezLi5^T6hj%@do~Hg9d-+X7pet%bt()z1+a}wiw&!fm+g`N2 zY}>4p?A+}h zgY5I{N7|R!m)lp`kGG#_Uu$1yKhwU=ezE-udu^BfYWwx}8|^pSZ?)fJf7t%4{SWpR z>@VA2wZCTn#QwGY8~eBR?;Q*rj2%oI%pEKotQ?#jJRH0nd>s57R1SR{q8wrz`Z^>z z^mj;cNOc(KQ0!3ZFvel5LzP2~!vu#(4#=V1VTr>shZPQ84yzs3I(+7^%i#-$Jr4UE z4muom_(tn++~Ide14kdnB*y~BsgBK#3mg|YE^%DuxWci^akb-i$Il&iIey`|$8oRY ze#e83mmGg~eBor{l;kwZX}r@Ur^!xJowQEKiFaD*wAyK{(|V_kPMe)}IvsL4=5)g8 zq|;fab57@-E;?Ouy6g0t)9+3Xot`@V>Ga&`g)`&q>GIoaEf! zIn_Dcd4O}F^DyUP=aJ5(&SRV>IoCN)b>^I>JI{2U<2=`SzVjmICCUp(%6JoI?%@!r$G)7aD0Q|W2tY2)eP8RFT?Q{&mkGuAV~Gs&~RXR_xY z&l1m3o?|@AJ;!-gdvaP&4QrsopR^`5&u_jvB}Jm`7Y^Qh->&kLTHJg<6Q^SthP z%kz%sJukw`-m9nA0I#uLlf7nnHF~vpwR_F+n(MW~Yn9hpug|UGuYskfDP zviDf;Dc-ZZo4wn-XM6MBi@n!*Z}Z;oeboD;_j&J2-dDY^dH>=4%=@{w_J#LL?>9a@ zd{jO$KJh+@KK*@CebRjje1`fA_bKtI^{Mk|^l9;F_nGap$Y-6;2A@qnTYPr;9QOIf z=eWz2p1R&(P0X>(|FG+i!?pq2DmSF@9x!6@HWaYW?c`X8O(YYxJAr z*XcLUZ*{bT*p{j>cC`sex&@h|c(_8;M2>p$JU!+);-0{_MS+7fNcRg0(J)M4mcg~dms_02=olh3oHw427}T;PSk%Yi=zUJtw# z_#p6c;M2gr0$&8a41C?gy+>h>#vVs{Jl6Jj)#GiDB!~#2gJeOw>2RbHQ!F9l>*g=LX*m{v-HR@Y@hc2oXYuFd^n4mLWDF_90Fot|9Ir*&$jk zWLwD1P@_o9{bi!kdjyD-NvmoVS3USW}8F=6px ziD7AB1H!Vy28HE?4GSv`YY&?jwj*qB*a26|PdLdaEK;F{*e~qN=|tRh6O2QVmq)sR~p>Rl`-<5vo#E znW{onr5dlAq^eU*Qz6w%RfDQo)ux)Q;#Koii&RThD^#mgYgOx2n^ap>J5;+=U#j-1 z4yX>Pj;fBUPO46;zE_=BT~b|D{iM37x}*A8^_%K}>apsn>Mzv`)l1bI)q6EmQ)-!7 zt~OGesLj=uY8$n^+DYxIRePwt)qd(gb+9^2-Ak=e_fbcyWS*f>Zxi@JwsiuZc?|ZJJg-(dFqAgCFtU#a)2zg8bnA5(v;{!V>X{e$|V`ilCR`iAsgY_}jiE-NG1FLRtTlETM~#cdUE`(k)dXmQG@+WF8nq@u6QzmOBxsT} z$(l6H08O@LkS1RQ=eUZzU*_q&$B+yBfTSoBf}yKB1c4)MlOu(id+-epx{+B8}j-6y(lbie44(UsBF(X*o$MK6s$ z5PdxQWc2Om-?hvxLJ5rxMO2JWF_$@V2je-+;bBef#yz?3>ef zVqdQBjJ^l@9`Ady@8iBN`o2uGNpwy0NQ_EMN=!~1l{hZ3CUIe6SK^w)Ly0F7PbWT3 ze3AGv$tKA)$s;K>X<$;GHmN0PZqkCJT}cO$4kg`7dX)4>KjVH@{cQUs^&8MHyI*a; z>HTK)Tib7Iza9O~_Pf&WT7P+e^Zu6oBl;)wPwGFp|BU|i{WtgD-G5L2OZ{*5zmrTR z8zw7~Rmu28TXIG6q~yBfmB|~DHz%J>zLI<``S0X+DImowB`75{r66TQN@~x({`slNc$`8MY?^uN4j@ozx%cu+ z^KA1R@&@G<DCG8+o_$o$|f&{qo1;*W^#k-<-cYe^373`R@jU!Mz4Y z4~`q$HF)FTErWj_{O91m3qlHd7ep4!Drhg5Q*g21hPL4L5a%I2L;Qz~9#TDI!jMx# zE)2O`XkF-1=w3Luu%vKQ;l{$9g(P$(pK_A$+eOjBm72$jp#L^Zp6$H4I^%j_-(|4 zk*OmGj?5dmcjVEL$46O=avbF{s%+HwQIkd;9Cc#UsZz62yHdx}lG5_haizOT50oAn zEgh{GZ8kb*bm8b>qt}n#F?!eNmt)`vBD7*k z#jJ|PinA40Dy~(ARraZju3S{Ps&Z}R+i~`NtJ+hwuj+Z#+iFR*x;nNxp<27DdQc6VrRKKr@tx2v)t7)%UP_ww^TFt$h zU&nin?=e1Pe8c$Jj3-%5vYnJasd&=JNn0m|Ju}AzIJKt zirU|_wNGpRnjAklb#lh!C6m`o{%rD}lV4AMSC>$iRyUw-S>3w24RtT4z$w&}j463j z3a0Fta(K!&Q*EZYPW6~tJ9YZhSyL}fy*c&Hw2*1Nr$tViJ#EpnrPHoWyEpAut-Cfr z8>B7Pj@4Fb*J`(Fw`q51_iC?c?{I*#nG0sFnYnJ}`k9+%y{%{K&FYo)mi5;4w)JlHp7lQUe)WO%LG|kT zg!=UQg8C8lqqOy->&xoP>nGMvuAf@3t)E^$v%al}?*`w7god#Vbq%W&~Ulo$A+I8ZZ_O*_`TupM$l-~XxV7fXy2%HYIJS%YYc1*ZVYYg z*{EuaX-sd-ZyeP)rm?(nTw_h+gvJ?-vl<&3n;Y*p{@nzd$R@f;*2Fd$G#NG7HaRpo zHMumoHF-AqH2F1!HT7yzH}!5xYD#WOZOUlMY|3sL)-FZDqFo;eOvuo16zYyLtA^c zs#_ykBU__e`?uz_R*Lm!ZDDP_+hW^N+Va|p+KSsowvBEZ*H+Uu zv8}ePu5D}E$+o*~58Ga7+g`T4X?x!e+o^VGyLr29yFr4O zPv;ByB7QVKmapK)@ss%uzLTHFFXWf-%lR&T4gVRxk>A2^(^b literal 64976 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 diff --git a/camera/CameraManager.swift b/camera/CameraManager.swift index 2dc0132..b5a27fe 100644 --- a/camera/CameraManager.swift +++ b/camera/CameraManager.swift @@ -34,8 +34,13 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { /// Capture sessioc to customize camera settings. var captureSession: AVCaptureSession? - /// Property to determine if the manager should show the error for the user. + /// Property to determine if the manager should show the error for the user. If you want to show the errors yourself set this to false. If you want to add custom error UI set showErrorBlock property var showErrorsToUsers = true + + /// A block creating UI to present error message to the user. + var showErrorBlock:(erTitle: String, erMessage: String) -> Void = { (erTitle: String, erMessage: String) -> Void in + UIAlertView(title: erTitle, message: erMessage, delegate: nil, cancelButtonTitle: "OK").show() + } /// The Bool property to determin if current device has front camera. var hasFrontCamera: Bool = { @@ -49,11 +54,6 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { return false }() - /// A block creating UI to present error message to the user. - var showErrorBlock:(erTitle: String, erMessage: String) -> Void = { (erTitle: String, erMessage: String) -> Void in - UIAlertView(title: erTitle, message: erMessage, delegate: nil, cancelButtonTitle: "OK").show() - } - /// Property to change camera device between front and back. var cameraDevice: CameraDevice { get { @@ -175,7 +175,7 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { switch newCameraOutputMode { case .StillImage: if (self.stillImageOutput == nil) { - self._setupStillImageOutput() + self._setupOutputs() } if let validStillImageOutput = self.stillImageOutput? { self.captureSession?.addOutput(validStillImageOutput) @@ -184,7 +184,7 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { case .VideoOnly, .VideoWithMic: if (self.movieOutput == nil) { - self._setupMovieOutput() + self._setupOutputs() } if let validMovieOutput = self.movieOutput? { self.captureSession?.addOutput(validMovieOutput) @@ -250,7 +250,11 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { :param: view The view you want to add the preview layer to :param: cameraOutputMode The mode you want capturesession to run image / video / video and microphone */ - func addPreeviewLayerToView(view: UIView, cameraOutputMode: CameraOutputMode) + func addPreeviewLayerToView(view: UIView) + { + self.addPreeviewLayerToView(view, newCameraOutputMode: self.currentCameraOutputMode) + } + func addPreeviewLayerToView(view: UIView, newCameraOutputMode: CameraOutputMode) { if let validEmbedingView = self.embedingView? { if let validPreviewLayer = self.previewLayer? { @@ -259,11 +263,11 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } if self.cameraIsSetup { self._addPreeviewLayerToView(view) - self.cameraOutputMode = cameraOutputMode + self.cameraOutputMode = newCameraOutputMode } else { self._setupCamera({ Void -> Void in self._addPreeviewLayerToView(view) - self.cameraOutputMode = cameraOutputMode + self.cameraOutputMode = newCameraOutputMode }) } } @@ -413,8 +417,7 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { if let validCaptureSession = self.captureSession? { validCaptureSession.beginConfiguration() self._addVideoInput() - self._setupStillImageOutput() - self._setupMovieOutput() + self._setupOutputs() self.cameraOutputMode = self.currentCameraOutputMode self._setupPreviewLayer() validCaptureSession.commitConfiguration() @@ -494,20 +497,16 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } } - private func _setupStillImageOutput() + private func _setupOutputs() { if (self.stillImageOutput == nil) { self.stillImageOutput = AVCaptureStillImageOutput() } - } - - private func _setupMovieOutput() - { if (self.movieOutput == nil) { self.movieOutput = AVCaptureMovieFileOutput() } } - + private func _setupPreviewLayer() { if let validCaptureSession = self.captureSession? { diff --git a/camera/ViewController.swift b/camera/ViewController.swift index e9dd6ff..7b722f7 100644 --- a/camera/ViewController.swift +++ b/camera/ViewController.swift @@ -18,10 +18,14 @@ class ViewController: UIViewController { override func viewDidLoad() { - super.viewDidLoad() - self.cameraManager.addPreeviewLayerToView(self.cameraView, cameraOutputMode: CameraOutputMode.VideoWithMic) + super.viewDidLoad() + self.cameraManager.addPreeviewLayerToView(self.cameraView, newCameraOutputMode: CameraOutputMode.VideoWithMic) + CameraManager.sharedInstance.addPreeviewLayerToView(self.cameraView) self.cameraManager.cameraDevice = .Front self.imageView.hidden = true + CameraManager.sharedInstance.showErrorBlock = { (erTitle: String, erMessage: String) -> Void in + UIAlertView(title: erTitle, message: erMessage, delegate: nil, cancelButtonTitle: "OK").show() + } } @IBAction func changeFlashMode(sender: UIButton)