#import "QRScanViewController.h" #import "AppDelegate.h" @interface QRScanViewController () { BOOL infoShowing; UIAlertView *alert; BOOL upToDown; int num; UIImageView *lineImageView; NSTimer *timer; } @end @implementation QRScanViewController @synthesize capture; @synthesize scanRectView; @synthesize backImageView; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization [self initViewFrame]; } return self; } - (void)viewDidLoad { [super viewDidLoad]; self.capture = [[ZXCapture alloc] init]; self.capture.camera = self.capture.back; self.capture.focusMode = AVCaptureFocusModeContinuousAutoFocus; self.capture.rotation = 90.0f; self.capture.layer.frame = self.view.bounds; [self.view.layer addSublayer:self.capture.layer]; [self.view bringSubviewToFront:self.backImageView]; [self.view bringSubviewToFront:self.scanRectView]; lineImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"scan_line.png"]]; lineImageView.frame = CGRectMake(self.scanRectView.frame.origin.x, self.scanRectView.frame.origin.y, self.scanRectView.frame.size.width, 4); [self.view addSubview:lineImageView]; } - (void)lineAnimation { if (!([self isViewLoaded] && [self.view superview])) { return; } if (upToDown) { num++; float temp = 0.0; if (4*num > self.scanRectView.frame.size.height-4) { temp = self.scanRectView.frame.size.height+self.scanRectView.frame.origin.y; upToDown = NO; }else{ temp = self.scanRectView.frame.origin.y + 4*num; } lineImageView.frame = CGRectMake(self.scanRectView.frame.origin.x, temp, self.scanRectView.frame.size.width, 4); }else{ num--; float temp = 0.0; if (num <= 0) { temp = self.scanRectView.frame.origin.y; upToDown = YES; }else{ temp = self.scanRectView.frame.origin.y + 4*num; } lineImageView.frame = CGRectMake(self.scanRectView.frame.origin.x, temp, self.scanRectView.frame.size.width, 4); } } - (void)viewDidAppear:(BOOL)animated { if (timer) { [timer invalidate]; timer = nil; } upToDown = YES; num = 0; lineImageView.frame = CGRectMake(self.scanRectView.frame.origin.x, self.scanRectView.frame.origin.y, self.scanRectView.frame.size.width, 4); timer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(lineAnimation) userInfo:nil repeats:YES]; } - (void)stopTimer { if (timer) { [timer invalidate]; timer = nil; } } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.capture.delegate = self; self.capture.layer.frame = self.view.bounds; // CGAffineTransform captureSizeTransform = CGAffineTransformMakeScale(320 / self.view.frame.size.width, 480 / self.view.frame.size.height); // self.capture.scanRect = CGRectApplyAffineTransform(self.scanRectView.frame, captureSizeTransform); if (viewer.device == DEVICE_IPAD || viewer.device == DEVICE_IPAD3) { [self showaCapture]; }else{ self.capture.rotation = 90.0f; CGAffineTransform transform = CGAffineTransformMakeRotation(0); [self.capture setTransform:transform]; CGRect f = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height); self.view.layer.frame=f; self.capture.layer.frame = f; } } - (void)showaCapture { CGAffineTransform transform; if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft) { self.capture.rotation = 180.0f; transform = CGAffineTransformMakeRotation(M_PI/2); } else if (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) { self.capture.rotation = 0.0f; transform = CGAffineTransformMakeRotation(-M_PI/2); } else if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { self.capture.rotation = 90.0f; transform = CGAffineTransformMakeRotation(0); } else if (self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { self.capture.rotation = 270.0f; transform = CGAffineTransformMakeRotation(M_PI); } [self.capture setTransform:transform]; CGRect f = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height); self.view.layer.frame=f; self.capture.layer.frame = f; } #pragma mark - ZXCaptureDelegate Methods //- (void)captureCameraIsReady:(ZXCapture *)capture //{ // //} // //- (void)captureSize:(ZXCapture *)capture width:(NSNumber *)width height:(NSNumber *)height //{ // //} - (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result { if (!result) { return; } NSLog(@"结果是什么= %@",result.text); NSString *formatString = [self barcodeFormatToString:result.barcodeFormat]; if (![formatString isEqualToString:@"QR Code"]) { return; } NSString *display = [NSString stringWithFormat:@"Scanned!\n\nFormat: %@\n\nContents:\n%@", formatString, result.text]; NSLog(@"二维码是%@",display); // [decodedLabel performSelectorOnMainThread:@selector(setText:) withObject:display waitUntilDone:YES]; AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); if (infoShowing) { return; } if (alert) { [alert release]; alert = nil; } alert = [[UIAlertView alloc] initWithTitle:@"信息" message:result.text delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; alert.delegate = self; [alert show]; infoShowing = YES; } #pragma mark - Private Methods - (NSString *)barcodeFormatToString:(ZXBarcodeFormat)format { switch (format) { case kBarcodeFormatAztec: return @"Aztec"; case kBarcodeFormatCodabar: return @"CODABAR"; case kBarcodeFormatCode39: return @"Code 39"; case kBarcodeFormatCode93: return @"Code 93"; case kBarcodeFormatCode128: return @"Code 128"; case kBarcodeFormatDataMatrix: return @"Data Matrix"; case kBarcodeFormatEan8: return @"EAN-8"; case kBarcodeFormatEan13: return @"EAN-13"; case kBarcodeFormatITF: return @"ITF"; case kBarcodeFormatPDF417: return @"PDF417"; case kBarcodeFormatQRCode: return @"QR Code"; case kBarcodeFormatRSS14: return @"RSS 14"; case kBarcodeFormatRSSExpanded: return @"RSS Expanded"; case kBarcodeFormatUPCA: return @"UPCA"; case kBarcodeFormatUPCE: return @"UPCE"; case kBarcodeFormatUPCEANExtension: return @"UPC/EAN extension"; default: return @"Unknown"; } } //- (BOOL)shouldAutorotate //{ // return YES; //} // //- (BOOL)shouldAutomaticallyForwardRotationMethods //{ // return YES; //} // //- (NSUInteger)supportedInterfaceOrientations //{ // return UIInterfaceOrientationMaskAll; //} - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)rotated { [self setViewFrame]; } - (void)setViewFrame{ } - (void)initViewFrame{ } #pragma mark - UIAlertViewDelegate - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex != alert.cancelButtonIndex) { } infoShowing = NO; } - (void)dealloc { [super dealloc]; } /* #pragma mark - Navigation @end
时间: 2024-10-31 11:11:13