Управление представлениями при интеграции zxing для iPhone - PullRequest
1 голос
/ 13 февраля 2012

Я пытаюсь интегрировать zxing в мое уже существующее приложение для iPhone. Я сослался на пример ScanTest, включенный в загрузку проекта, и сумел построить и запустить сканер.

Моя проблема заключается в управлении представлениями проекта для включения сканера. В настоящее время у меня уже есть контроллер представления (VC-A), который нуждается в способности сканера. Я создал новый контроллер вида (VC-B) для запуска вида сканера ZXingWidgetController. Итак, поток выглядит следующим образом:

VC-A-> presentModalViewController (VC-B) -> VC-B-> presentModalViewController (ZXingWidgetController)

Теперь, как и в примере приложения ScanTest, когда сканирование завершено, из VC-B вызывается dismissModalViewController, который отклоняет представление ZXingWidgetController. Проблема в том, как бы я ни пытался, я не могу уволить VC-B и вернуться в VC-A. Я создал набор методов делегата для уведомления VC-A, когда сканирование завершено / отменено. Я получаю данные сканирования этими методами, но не могу отклонить представление VC-B.

Я не хочу модифицировать свой уже существующий контроллер представления VC-A, поэтому я не могу включить в него непосредственно ZXingWidgetController, полностью отбрасывая VC-B (потому что для этого потребуется сделать VC-A файлом .mm).

EDIT: Теперь я покончу с модальным ZXingWidgetController, в целом. Используя этот код в viewDidLoad на VC-B

//Create custom overlay
OverlayView *scannerView = [[OverlayView alloc]initWithFrame:CGRectMake(27, 107, 267, 253) cancelEnabled:NO oneDMode:NO];
scannerView.displayedMessage = nil;
widController = [[ZXingWidgetController alloc]init ];

//set the overlay of widController
[widController setOverlayView:scannerView];

QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];
[qrcodeReader release];
widController.readers = readers;
widController.delegate = self;
[readers release];
[scannerView release];
NSBundle *mainBundle = [NSBundle mainBundle];
widController.soundToPlay = [NSURL fileURLWithPath:[mainBundle pathForResource:@"beep-beep" ofType:@"aiff"] isDirectory:NO];

//Add scanner to the view
  [self.view addSubview:widController.view];

Теперь вид с камеры ZXingWidgetController вообще не виден. Кто-нибудь настраивал оверлей для Zxing? Похоже, я не вижу подобной проблемы на SO.

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

С ZXing вы можете получить прямой доступ к оверлейному виду и добавить / изменить его подпредставления.Например, отображение изображения сверху этого обзора выполняется следующим образом:

ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];

UIImage *qrOverlayImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"overlay-image" ofType:@"png"]];

UIImageView *qrOverlayImageView = [[[UIImageView alloc] initWithImage:qrOverlayImage] autorelease];
qrOverlayImageView.contentMode = UIViewContentModeScaleAspectFit;
qrOverlayImageView.backgroundColor = [UIColor clearColor];

[widController.overlayView addSubview:qrOverlayImageView];

Использование PNG с прозрачностью, добавление UILabels и т. Д. Для программного создания пользовательского наложения.

2 голосов
/ 01 мая 2012

Просто небольшая заметка для рассмотрения; при тестировании Mountain Lion с Xcode 4.4 мне не удалось собрать один из моих существующих проектов из-за ZBar. Я не могу сказать, будет ли ZBar обновлен для работы с Xcode 4.4 или что-то изменится в Xcode 4.4, что позволит ZBar работать. Кто знает!

Я обновил свои проекты, чтобы вместо них использовать Zxing, хотя его сложнее настроить и настроить.

Обновление : Я начал использовать ZXingObjC сейчас (https://github.com/TheLevelUp/ZXingObjC). Работать легче, чем Zxing, и в нем также есть много функций, которые отсутствуют в Zxing.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...