实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
// // BarcodeDecodeViewController.m // Barcode // // Created by Stefan Hafeneger on 22.09.08. // Copyright 2008 __MyCompanyName__. All rights reserved. // #import "BarcodeDecodeViewController.h" #import <AudioToolbox/AudioServices.h> #import "BarcodeAppDelegate.h" #import "ResultManager.h" @interface BarcodeDecodeViewController () #pragma mark Properties @property(nonatomic, retain) BarcodeEngine *barcodeEngine; @property(nonatomic, retain) UIImage *image; @property(nonatomic, retain) NSString *result; @property(nonatomic, retain) UIImageView *imageView; @property(nonatomic, getter=isActivity) BOOL activity; @property(nonatomic, getter=isSaved) BOOL saved; #pragma mark Private - (void)updateInterface; - (void)pickImageWithSourceType:(UIImagePickerControllerSourceType)sourceType; @end @implementation BarcodeDecodeViewController #pragma mark Allocation - (id)initWithBarcodeType:(BarcodeType)type { self = [super initWithNibName:@"BarcodeDecodeViewController" bundle:nil]; if(self != nil) { switch(type) { case BarcodeTypeDataMatrix: self.title = NSLocalizedString(@"DataMatrix", nil); break; case BarcodeTypeQRCode: self.title = NSLocalizedString(@"QR Code", nil); break; } self.barcodeEngine = [BarcodeEngine barcodeEngineWithBarcodeType:type]; self.barcodeEngine.delegate = self; self.image = nil; self.result = nil; self.imageView = nil; self.activity = NO; self.saved = NO; } return self; } - (void)dealloc { self.barcodeEngine = nil; self.image = nil; self.result = nil; self.imageView = nil; [super dealloc]; } #pragma mark Properties; @synthesize barcodeEngine = _barcodeEngine; @synthesize image = _image; @synthesize result = _result; @synthesize imageView = _imageView; @synthesize activity = _activity; @synthesize saved = _saved; #pragma mark Inherent - (void)viewDidLoad { // Clear text view. textView.text = @""; // Setup buttons and labels. [buttonDecode setTitle:NSLocalizedString(@"Decode", nil) forState:UIControlStateNormal]; [buttonDecode setTitle:NSLocalizedString(@"Decode", nil) forState:UIControlStateHighlighted]; [buttonDecode setTitle:NSLocalizedString(@"Decode", nil) forState:UIControlStateDisabled]; activityLabel.text = NSLocalizedString(@"Decoding...", nil); [buttonCancel setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateNormal]; [buttonCancel setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateHighlighted]; // Setup scrollView. scrollView.delegate = self; scrollView.indicatorStyle = UIScrollViewIndicatorStyleBlack; scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(15.0f, 15.0f, 15.0f, 15.0f); scrollView.bouncesZoom = YES; // Update interface. [self updateInterface]; } #pragma mark Private - (void)updateInterface { if(self.isActivity) { if(!self.navigationItem.hidesBackButton) [self.navigationItem setHidesBackButton:YES animated:YES]; buttonDecode.enabled = NO; buttonDecode.hidden = YES; activityOverlayView.hidden = NO; activityIndicatorView.hidden = NO; if(![activityIndicatorView isAnimating]) [activityIndicatorView startAnimating]; activityLabel.hidden = NO; buttonCancel.hidden = NO; barButtonCamera.enabled = NO; barButtonLibrary.enabled = NO; barButtonOrganize.enabled = NO; barButtonAction.enabled = NO; } else { if(self.navigationItem.hidesBackButton) [self.navigationItem setHidesBackButton:NO animated:YES]; buttonDecode.enabled = (self.image != nil && !self.barcodeEngine.isRunning); buttonDecode.hidden = NO; activityOverlayView.hidden = YES; activityIndicatorView.hidden = YES; if([activityIndicatorView isAnimating]) [activityIndicatorView stopAnimating]; activityLabel.hidden = YES; buttonCancel.hidden = YES; barButtonCamera.enabled = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; barButtonLibrary.enabled = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]; barButtonOrganize.enabled = (self.result != nil && !self.isSaved); barButtonAction.enabled = (self.result != nil); } BarcodeAppDelegate *applicationDelegate = (BarcodeAppDelegate *)[UIApplication sharedApplication].delegate; if(applicationDelegate.scheme != nil) { barButtonOrganize.enabled = NO; barButtonAction.enabled = NO; } } - (void)pickImageWithSourceType:(UIImagePickerControllerSourceType)sourceType { // Create new image picker controller. UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.allowsImageEditing = NO; imagePickerController.delegate = self; imagePickerController.sourceType = sourceType; imagePickerController.navigationBar.barStyle = UIBarStyleBlackOpaque; // Show the image picker. [self.navigationController presentModalViewController:imagePickerController animated:YES]; } #pragma mark IBAction - (IBAction)decodeImage:(id)sender { // Calculate scrollView scale factor. CGPoint origin = scrollView.contentOffset; CGSize size = scrollView.contentSize; CGFloat scale = self.image.size.width / size.width; // Calculate target area. CGRect rect = CGRectMake((origin.x 60.0f) * scale, (origin.y 26.0f) * scale, 200.0f * scale, 200.0f * scale); // Decode image. [self.barcodeEngine decodeImage:self.image withRect:rect]; } - (IBAction)cancelDecode:(id)sender { [self.barcodeEngine cancelOperation]; } - (IBAction)pickImageFromCamera:(id)sender { [self pickImageWithSourceType:UIImagePickerControllerSourceTypeCamera]; } - (IBAction)pickImageFromLibrary:(id)sender { [self pickImageWithSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; } - (IBAction)organizeResult:(id)sender { if(!self.isSaved) { BarcodeAppDelegate *applicationDelegate = (BarcodeAppDelegate *)[UIApplication sharedApplication].delegate; [applicationDelegate addResultWithString:self.result]; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Saved Result." message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; [alertView release]; self.saved = YES; [self updateInterface]; } } - (IBAction)showActionSheet:(id)sender { // Show action sheet for result. [[ResultManager sharedResultManager] showActionSheetForResult:[[ResultManager sharedResultManager] resultFromString:self.result] fromToolbar:toolbar]; } #pragma mark UIScrollViewDelegate - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.imageView; } - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale { } #pragma mark UINavigationControllerDelegate - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { // Nothing to do yet. } - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { // Nothing to do yet. } #pragma mark UIImagePickerControllerDelegate - (void)imagePickerController:(UIImagePickerController *)imagePickerController didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { self.image = image; CGFloat scale = fmaxf(320.0f / image.size.width, 252 / image.size.height); if(self.imageView != nil) [self.imageView removeFromSuperview]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; imageView.frame = CGRectMake(0.0f, 0.0f, image.size.width * scale, image.size.height * scale); [scrollView addSubview:imageView]; self.imageView = imageView; [imageView release]; scrollView.contentSize = CGSizeMake(image.size.width * scale, image.size.height * scale); scrollView.maximumZoomScale = 1 / scale; scrollView.minimumZoomScale = 1.0f; scrollView.contentOffset = CGPointZero; self.result = nil; textView.text = @""; // Dismiss image picker. [self.navigationController dismissModalViewControllerAnimated:YES]; [imagePickerController release]; [self updateInterface]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)imagePickerController { [self.navigationController dismissModalViewControllerAnimated:YES]; [imagePickerController release]; } #pragma mark BarcodeEngineDelegate - (void)barcodeEngine:(BarcodeEngine *)barcodeEngine willDecodeImage:(UIImage *)image { self.result = nil; textView.text = nil; self.activity = YES; [self updateInterface]; } - (void)barcodeEngine:(BarcodeEngine *)barcodeEngine didDecodeImage:(UIImage *)image withString:(NSString *)string { AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); self.result = string; textView.text = string; self.activity = NO; self.saved = NO; [self updateInterface]; BarcodeAppDelegate *applicationDelegate = (BarcodeAppDelegate *)[UIApplication sharedApplication].delegate; if(applicationDelegate.scheme != nil) [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://barcode?status=success&result=%@&userinfo=%@", applicationDelegate.scheme, string, applicationDelegate.userinfo]]]; } - (void)barcodeEngine:(BarcodeEngine *)barcodeEngine didNotDecodeImage:(UIImage *)image { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Could not decode barcode!" message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; [alertView release]; self.activity = NO; [self updateInterface]; BarcodeAppDelegate *applicationDelegate = (BarcodeAppDelegate *)[UIApplication sharedApplication].delegate; if(applicationDelegate.scheme != nil) [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://barcode?status=failed&userinfo=%@", applicationDelegate.scheme, applicationDelegate.userinfo]]]; } - (void)barcodeEngineDidCancelOperation:(BarcodeEngine *)barcodeEngine { self.activity = NO; [self updateInterface]; BarcodeAppDelegate *applicationDelegate = (BarcodeAppDelegate *)[UIApplication sharedApplication].delegate; if(applicationDelegate.scheme != nil) [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://barcode?status=cancel&userinfo=%@", applicationDelegate.scheme, applicationDelegate.userinfo]]]; } - (void)barcodeEngineDidStopOperation:(BarcodeEngine *)barcodeEngine { [self updateInterface]; } @end
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论