From 3723f2a969fb104c055bfa6db1c269a46eaf3e40 Mon Sep 17 00:00:00 2001 From: FTY Date: Mon, 11 Apr 2016 18:43:39 +0800 Subject: [PATCH 1/2] qrcode --- .../project.pbxproj | 46 ++++-- .../Base.lproj/Main.storyboard | 6 +- .../AppIcon.appiconset/Contents.json | 20 +++ QRCodeReaderViewController/QRCodeReaderView.m | 132 ++++++++++++++---- 4 files changed, 161 insertions(+), 43 deletions(-) diff --git a/Example/QRCodeReaderViewControllerExample.xcodeproj/project.pbxproj b/Example/QRCodeReaderViewControllerExample.xcodeproj/project.pbxproj index 46067ad..34231e6 100644 --- a/Example/QRCodeReaderViewControllerExample.xcodeproj/project.pbxproj +++ b/Example/QRCodeReaderViewControllerExample.xcodeproj/project.pbxproj @@ -19,6 +19,11 @@ CEAF7A661A16A31600991CF8 /* QRCodeReaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = CEAF7A651A16A31600991CF8 /* QRCodeReaderView.m */; }; CEAF7A691A16B05400991CF8 /* QRCameraSwitchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = CEAF7A681A16B05400991CF8 /* QRCameraSwitchButton.m */; }; CEF6D1641BE7B2B0006D575D /* QRToggleTorchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF6D1631BE7B2B0006D575D /* QRToggleTorchButton.m */; }; + D424A6111CBBB0F90076F44D /* center_qrcode_leftdown_img@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D424A60C1CBBB0F90076F44D /* center_qrcode_leftdown_img@2x.png */; }; + D424A6121CBBB0F90076F44D /* center_qrcode_leftup_img@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D424A60D1CBBB0F90076F44D /* center_qrcode_leftup_img@2x.png */; }; + D424A6131CBBB0F90076F44D /* center_qrcode_line_img@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D424A60E1CBBB0F90076F44D /* center_qrcode_line_img@2x.png */; }; + D424A6141CBBB0F90076F44D /* center_qrcode_rightdown_img@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D424A60F1CBBB0F90076F44D /* center_qrcode_rightdown_img@2x.png */; }; + D424A6151CBBB0F90076F44D /* center_qrcode_rightup_img@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D424A6101CBBB0F90076F44D /* center_qrcode_rightup_img@2x.png */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -55,6 +60,11 @@ CEAF7A681A16B05400991CF8 /* QRCameraSwitchButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QRCameraSwitchButton.m; sourceTree = ""; }; CEF6D1621BE7B2B0006D575D /* QRToggleTorchButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QRToggleTorchButton.h; sourceTree = ""; }; CEF6D1631BE7B2B0006D575D /* QRToggleTorchButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QRToggleTorchButton.m; sourceTree = ""; }; + D424A60C1CBBB0F90076F44D /* center_qrcode_leftdown_img@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "center_qrcode_leftdown_img@2x.png"; sourceTree = ""; }; + D424A60D1CBBB0F90076F44D /* center_qrcode_leftup_img@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "center_qrcode_leftup_img@2x.png"; sourceTree = ""; }; + D424A60E1CBBB0F90076F44D /* center_qrcode_line_img@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "center_qrcode_line_img@2x.png"; sourceTree = ""; }; + D424A60F1CBBB0F90076F44D /* center_qrcode_rightdown_img@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "center_qrcode_rightdown_img@2x.png"; sourceTree = ""; }; + D424A6101CBBB0F90076F44D /* center_qrcode_rightup_img@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "center_qrcode_rightup_img@2x.png"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -137,6 +147,7 @@ CE29603E1987F140008FA93B /* QRCodeReaderViewController */ = { isa = PBXGroup; children = ( + D424A60B1CBBB0F90076F44D /* Resources */, CE29603F1987F140008FA93B /* QRCodeReaderDelegate.h */, CE2960401987F140008FA93B /* QRCodeReaderViewController.h */, CE2960411987F140008FA93B /* QRCodeReaderViewController.m */, @@ -153,6 +164,18 @@ path = ../QRCodeReaderViewController; sourceTree = ""; }; + D424A60B1CBBB0F90076F44D /* Resources */ = { + isa = PBXGroup; + children = ( + D424A60C1CBBB0F90076F44D /* center_qrcode_leftdown_img@2x.png */, + D424A60D1CBBB0F90076F44D /* center_qrcode_leftup_img@2x.png */, + D424A60E1CBBB0F90076F44D /* center_qrcode_line_img@2x.png */, + D424A60F1CBBB0F90076F44D /* center_qrcode_rightdown_img@2x.png */, + D424A6101CBBB0F90076F44D /* center_qrcode_rightup_img@2x.png */, + ); + path = Resources; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -202,7 +225,7 @@ TargetAttributes = { CE2960171987F124008FA93B = { CreatedOnToolsVersion = 6.0; - DevelopmentTeam = 5SJ773RP6R; + DevelopmentTeam = 84LY8T43ZV; }; CE29602D1987F124008FA93B = { CreatedOnToolsVersion = 6.0; @@ -234,6 +257,11 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + D424A6151CBBB0F90076F44D /* center_qrcode_rightup_img@2x.png in Resources */, + D424A6111CBBB0F90076F44D /* center_qrcode_leftdown_img@2x.png in Resources */, + D424A6131CBBB0F90076F44D /* center_qrcode_line_img@2x.png in Resources */, + D424A6141CBBB0F90076F44D /* center_qrcode_rightdown_img@2x.png in Resources */, + D424A6121CBBB0F90076F44D /* center_qrcode_leftup_img@2x.png in Resources */, CE2960271987F124008FA93B /* Main.storyboard in Resources */, CE2960291987F124008FA93B /* Images.xcassets in Resources */, ); @@ -379,13 +407,13 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer: Bo Liu (C27S66H283)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Bo Liu (C27S66H283)"; INFOPLIST_FILE = QRCodeReaderViewControllerExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.yannickloriot.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_BUNDLE_IDENTIFIER = com.tgnet.ywq; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE = "4290ec7a-f199-4988-8b69-9ee1492b3634"; }; name = Debug; }; @@ -394,13 +422,13 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer: Bo Liu (C27S66H283)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Bo Liu (C27S66H283)"; INFOPLIST_FILE = QRCodeReaderViewControllerExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.yannickloriot.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_BUNDLE_IDENTIFIER = com.tgnet.ywq; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE = "4290ec7a-f199-4988-8b69-9ee1492b3634"; }; name = Release; }; diff --git a/Example/QRCodeReaderViewControllerExample/Base.lproj/Main.storyboard b/Example/QRCodeReaderViewControllerExample/Base.lproj/Main.storyboard index ae6cb57..32b67cd 100644 --- a/Example/QRCodeReaderViewControllerExample/Base.lproj/Main.storyboard +++ b/Example/QRCodeReaderViewControllerExample/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + @@ -19,7 +19,6 @@ - diff --git a/Example/QRCodeReaderViewControllerExample/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/QRCodeReaderViewControllerExample/Images.xcassets/AppIcon.appiconset/Contents.json index 91bf9c1..eeea76c 100644 --- a/Example/QRCodeReaderViewControllerExample/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Example/QRCodeReaderViewControllerExample/Images.xcassets/AppIcon.appiconset/Contents.json @@ -5,16 +5,31 @@ "size" : "29x29", "scale" : "2x" }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -44,6 +59,11 @@ "idiom" : "ipad", "size" : "76x76", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" } ], "info" : { diff --git a/QRCodeReaderViewController/QRCodeReaderView.m b/QRCodeReaderViewController/QRCodeReaderView.m index 60a1192..2b86fcd 100644 --- a/QRCodeReaderViewController/QRCodeReaderView.m +++ b/QRCodeReaderViewController/QRCodeReaderView.m @@ -26,8 +26,32 @@ #import "QRCodeReaderView.h" +#define SCAN_QRCODE_TEXT_TITLE @"扫一扫" + +#define SCAN_QRCODE_BGCOLOR [UIColor colorWithRed:0 green:0 blue:0 alpha:0.3] + +#define SCAN_QRCODE_IMG_LEFT_UP @"center_qrcode_leftup_img" +#define SCAN_QRCODE_IMG_RIGHT_UP @"center_qrcode_rightup_img" +#define SCAN_QRCODE_IMG_LEFT_DOWN @"center_qrcode_leftdown_img" +#define SCAN_QRCODE_IMG_RIGHT_DOWN @"center_qrcode_rightdown_img" + +#define SCAN_QRCODE_IMG_LINE @"center_qrcode_line_img" + @interface QRCodeReaderView () -@property (nonatomic, strong) CAShapeLayer *overlay; + +@property (weak, nonatomic) UIView *topViewBG; +@property (weak, nonatomic) UIView *leftViewBG; +@property (weak, nonatomic) UIView *rightViewBG; +@property (weak, nonatomic) UIView *bottomViewBG; + +@property (weak, nonatomic) UIImageView *leftUpImageView; +@property (weak, nonatomic) UIImageView *leftDownImageView; +@property (weak, nonatomic) UIImageView *rightUpImageView; +@property (weak, nonatomic) UIImageView *rightDownImageView; + +@property (weak, nonatomic) UIImageView *lineImageView; + +@property (weak, nonatomic) UILabel *tipLabel; @end @@ -36,45 +60,93 @@ @implementation QRCodeReaderView - (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { - [self addOverlay]; + [self setupSubViews]; } return self; } -- (void)drawRect:(CGRect)rect -{ - CGRect innerRect = CGRectInset(rect, 50, 50); - - CGFloat minSize = MIN(innerRect.size.width, innerRect.size.height); - if (innerRect.size.width != minSize) { - innerRect.origin.x += (innerRect.size.width - minSize) / 2; - innerRect.size.width = minSize; - } - else if (innerRect.size.height != minSize) { - innerRect.origin.y += (innerRect.size.height - minSize) / 2; - innerRect.size.height = minSize; - } - - CGRect offsetRect = CGRectOffset(innerRect, 0, 15); +- (void)setupSubViews{ + + self.topViewBG = [self createViewBG]; + [self addSubview:self.topViewBG]; + + self.leftViewBG = [self createViewBG]; + [self addSubview:self.leftViewBG]; + + self.rightViewBG = [self createViewBG]; + [self addSubview:self.rightViewBG]; + + self.bottomViewBG = [self createViewBG]; + [self addSubview:self.bottomViewBG]; + + self.leftUpImageView = [self createImageViewWithImageName:SCAN_QRCODE_IMG_LEFT_UP]; + [self addSubview:self.leftUpImageView]; + + self.leftDownImageView = [self createImageViewWithImageName:SCAN_QRCODE_IMG_LEFT_DOWN]; + [self addSubview:self.leftDownImageView]; + + self.rightUpImageView = [self createImageViewWithImageName:SCAN_QRCODE_IMG_RIGHT_UP]; + [self addSubview:self.rightUpImageView]; + + self.rightDownImageView = [self createImageViewWithImageName:SCAN_QRCODE_IMG_RIGHT_DOWN]; + [self addSubview:self.rightDownImageView]; + + self.lineImageView = [self createImageViewWithImageName:SCAN_QRCODE_IMG_LINE]; + [self addSubview:self.lineImageView]; + + UILabel *tipLabel = [[UILabel alloc] init]; + [tipLabel setNumberOfLines:0]; + [tipLabel setText:@"将二维码图案放在取景框内,即可自动扫描"]; + [tipLabel setTextColor:[UIColor whiteColor]]; + [tipLabel setBackgroundColor:[UIColor clearColor]]; + [tipLabel setTextAlignment:NSTextAlignmentCenter]; + [tipLabel setFont:[UIFont systemFontOfSize:14]]; + self.tipLabel = tipLabel; + [self addSubview:self.tipLabel]; + +} +- (UIView *)createViewBG{ + UIView *viewBG = [[UIView alloc] init]; + [viewBG setBackgroundColor:SCAN_QRCODE_BGCOLOR]; + return viewBG; +} - _overlay.path = [UIBezierPath bezierPathWithRoundedRect:offsetRect cornerRadius:5].CGPath; +- (UIImageView *)createImageViewWithImageName:(NSString *)imageName{ + UIImageView *imgView = [[UIImageView alloc] init]; + [imgView setImage:[UIImage imageNamed:imageName]]; + return imgView; } -#pragma mark - Private Methods +- (void)layoutSubviews{ + [super layoutSubviews]; + + CGFloat width = self.frame.size.width; + CGFloat height = self.frame.size.height; + + self.topViewBG.frame = CGRectMake(40, 0, width-40, 40); + self.leftViewBG.frame = CGRectMake(0, 0, 40, width); + self.rightViewBG.frame = CGRectMake(width-40, 40, 40, width); + self.bottomViewBG.frame = CGRectMake(40, width - 40, width - 80, height- width + 40); + + self.leftUpImageView.frame = CGRectMake(37, 37, 30, 30); + self.leftDownImageView.frame = CGRectMake(37, width - 67, 30, 30); + self.rightUpImageView.frame = CGRectMake(width - 67, 37, 30, 30); + self.rightDownImageView.frame = CGRectMake(width - 67, width - 67, 30, 30); + + self.lineImageView.frame = CGRectMake(40, 40, width - 80, 2); + [UIView animateWithDuration:3.0 delay:0 options:UIViewAnimationOptionRepeat animations:^{ + [self.lineImageView setFrame:CGRectMake(40, width - 45, width - 80, 2)]; + } completion:^(BOOL finished) { + + }]; + + + self.tipLabel.frame = CGRectMake(10, width-25, width-20, 60); -- (void)addOverlay -{ - _overlay = [[CAShapeLayer alloc] init]; - _overlay.backgroundColor = [UIColor clearColor].CGColor; - _overlay.fillColor = [UIColor clearColor].CGColor; - _overlay.strokeColor = [UIColor whiteColor].CGColor; - _overlay.lineWidth = 3; - _overlay.lineDashPattern = @[@7.0, @7.0]; - _overlay.lineDashPhase = 0; - - [self.layer addSublayer:_overlay]; + } + @end From 1b738697f86c7ffb1c7a3e4bda2973420e9beceb Mon Sep 17 00:00:00 2001 From: FTY Date: Mon, 11 Apr 2016 18:43:57 +0800 Subject: [PATCH 2/2] image --- .../Resources/center_qrcode_leftdown_img@2x.png | Bin 0 -> 1020 bytes .../Resources/center_qrcode_leftup_img@2x.png | Bin 0 -> 1015 bytes .../Resources/center_qrcode_line_img@2x.png | Bin 0 -> 1139 bytes .../Resources/center_qrcode_rightdown_img@2x.png | Bin 0 -> 1012 bytes .../Resources/center_qrcode_rightup_img@2x.png | Bin 0 -> 1014 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 QRCodeReaderViewController/Resources/center_qrcode_leftdown_img@2x.png create mode 100644 QRCodeReaderViewController/Resources/center_qrcode_leftup_img@2x.png create mode 100644 QRCodeReaderViewController/Resources/center_qrcode_line_img@2x.png create mode 100644 QRCodeReaderViewController/Resources/center_qrcode_rightdown_img@2x.png create mode 100644 QRCodeReaderViewController/Resources/center_qrcode_rightup_img@2x.png diff --git a/QRCodeReaderViewController/Resources/center_qrcode_leftdown_img@2x.png b/QRCodeReaderViewController/Resources/center_qrcode_leftdown_img@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..29d8f5891058785fb9bd293082fdd362e7590dbb GIT binary patch literal 1020 zcma)5PiWIn9FB-X%jQW0_43Fr3O32>+GGujqir%*Sjy-MtDs<-ysmLeUY7UTraj2; zCJgc5-IKyV^ytCEJUGOgLl7LO;K9>CcFDtbN6(7m_$M=1|zwiEH>H0+CVuIti ziQ>FoW~&_kr^nd5Y25kDmJ8IV(j{D{Z7W1v&cQVVik`KC%E)p$>+jGE$DQQeN|jd4 z1=Yr$V8s|A@&d-@xS81~unAkd@b^z2cfGPf8t)mPmeZ-D(S(-KvA=&6CY4Tr#4;kd8QQFH^~u;&pcX=8Q5;qN=}!QDJh$m(sK|R>1k=YkcXL!F6)M( zKxM$yvEB5LPX}D*n425Pja$JBm}MP>ZVNecA@)EoWYrz*i!xHL&vi!oGCh(jGH1lN zuzwVKaK*YO-VWQA9fpmMeAewDYwJsgn|Ilh2#R{H67B8pX^9PKd}H^`&SUcPOS&l~Z3EE*;KdH(jj-}@X^HUIzs literal 0 HcmV?d00001 diff --git a/QRCodeReaderViewController/Resources/center_qrcode_leftup_img@2x.png b/QRCodeReaderViewController/Resources/center_qrcode_leftup_img@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bc408691e9c7a370cfd7c4fec8bda6c7e51424fe GIT binary patch literal 1015 zcma)5O=#0l91j#!#x?};pm=zsAQRSnt;xuvakfqC0?VjvVTE1HlD9SMl9wf~HZ221 zy$FI=Z=U=B!JA$@^f)|v@!$u73`7tF!IKwXy0+WFijU-d@%#P$pYL8}_3F&j`6-5B zW{hRMN>?TMPo1Fi{nGX)x|}1W2C3mq(y>CsaGeDXhg-a;s%oMk zNg0aBL|va)amJ6*BLy8rcIXDg#Xd+Btqt5J8cRJr48aS=vVJs76HOQ&TLCX}LK4yl zXqx|qdfpfvkt#a!_picHy&E9DiXz+&ZCbd^bYd!i#SmEphjom1Mp>*hF~Lz22cTF} zz}%YaJGc{F8sJS68h%79-$sV6u~dO`T?fh~sl2GjazV(JMX{7sg+jiN*JY_FDvPq9 zj<`Cu+aB`Ci0d42m5JP>6}*62)=}u*Ku$Tt9vFlS-O0WzOw=24oyoprCvth}44)MC zSfNK(w0n~6xNYfS-1x|+-5%1met2-OLZ3v-(DU{9{r9)x>@6^T<(hDD?(5HYG56)k zJa>UfcW-XPUypbBZ?k7!-8E9b*IWH(`)5C^k3Kxzf4ROl{hwopJYZ7H$I~ZU&--`w PlBZ~tR`nN!>$m>^hKn?w literal 0 HcmV?d00001 diff --git a/QRCodeReaderViewController/Resources/center_qrcode_line_img@2x.png b/QRCodeReaderViewController/Resources/center_qrcode_line_img@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5db3f282a4a59306db66849bea3af20a94e9fac6 GIT binary patch literal 1139 zcmaJ>TWHfz7|wJ~-MoSdb4+7=@z$p4+RVmPZJX9r?Hpa_3L=;$r(4*PlO<=iD;=VO zs1G8jxJ|_i13~802NltI7u|!1&Vg(?(Fa8tPVhkyMNhVM`d|&=)Xk5+VH0k`J<=`#!*7h0pXEg43I%Zs0CplNX?Bs zpbQfzITA(D&_+&#id8T%)}*3gHbIoFNos;v4-gpxwX*7_hOghENLg}IHO`PNr1?Od zT%OWFRjMK)rs_qPM6Fp(mL)kXpa3M0Nu@zGxTKpJ(dDph9@7*#0zvg|YBZ>5sFL(S z9gt3IiAA(A49T)q#^GdHW(8@tF?QO9U)I7nI48^5OUbc^!rpW#&V~8Fm@m9@Q*{Vw z98D(@32UOn3iVo=ak*TkhTU$#2#e9IA|Yu}jl~%S9vGr7Ye>ECO=x1KX?#nInVh7XbkLZQb z1?htOJp+S{=UO{2MBcBz*7@P_y~4r!{SUZl#}}Qt^2qo4xu<(VYP)u|Z);I&A$&)z xua9@N-}z)oe^{35nU(ALe6}2~vu1C~$s;y>JJZMSiuanofuO&F@A7Wj^&9qlCwvm;%N?vrbt1tSRQ=+&DaEO4y$r)P^MWCvjm{n9& zyaFUalz4%DYDUazimFLDFdi(m7CJ4h292>TdeYf8A%Vv8{eGY8%N!23crl;PCmNEJ zp@>X0@QD>?{Ah8a08wOzZa`e@gGABV#66<3)YGF7ykIKpN8>cngz>Qz@FFK9Ax(g$ z`ERJ_P0Y!oAR@g=;M)rUI=LB8%X#fpK?|#kDpjIBMenlenc$aMir>DRDp9{N6Sf2k>#RM6tadWma|Ke43~1UVL(O5896xN zLTvXu<Qax_tG}N#0?l LT!lNujeEZV8IMN8 literal 0 HcmV?d00001 diff --git a/QRCodeReaderViewController/Resources/center_qrcode_rightup_img@2x.png b/QRCodeReaderViewController/Resources/center_qrcode_rightup_img@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e1c247ebd98175a55a07adffea2f593933e70448 GIT binary patch literal 1014 zcma)5&ui0A9FI&zhXuVTio)aVqF|GzYu{{W9Bq=i$}&n@SaD9xlGirdk{6R#oA#hX zya*n|zd$^Tdh_5xc2V@=!IR2B^r*PgK-fWFy0-IR#Yd9&gU{#l{l4$_le?w43$gJN z;~dAuiZg1N%_w>g>}TJ5+VTdQj#I5hE2K`_hL5?NMV2rqIz|JRv0-(tzrk6K8-sSW zMr-=4WDCRQn z?uwbQ;PiQr4J9VvU}}KSS#<*`lwnU-V(aKwfS?DVD>B?ks-~BKLVOI;{AAorh$29U z7gK43#Iqoo5R*cJJt!`wq%@L}Q=mT}i{@K(sjL?IvDi+AO-emU5ZdiF-=5@&-w?!1 zCKG8SlW~TK2OXChVcZQS1_~+;OyBmXO)I^bHnTx}#bvV!BW$SU^j8`vuN!~wl4OZMno@+0;7Tx)bL%1Exj zk`bcD{?X{c5pz$p9NLy`hQ`M(bGy%MegDh1=$BY7s<~?T@%#Jr*cv#j0o%|VvEoyV>ll-;YzX37&H*x>~ literal 0 HcmV?d00001