ZBarReaderView с нестандартным размером из раскадровки, перемещающейся после запуска, вызывается

у меня есть ZBarReaderView, созданный из раскадровки с размером 216x20 пикселей, который отображается примерно как 230x50 пикселей, потому что ZBarReaderView не слишком серьезно относится к своему размеру... Все это работает очень хорошо, однако ведет себя очень странно, когда я вызываю start для этого readerView . Он запускает камеру, но затем, возможно, через полсекунды readerView немного масштабируется, и изображение с камеры внутри readerView перемещается вниз, а затем снова вверх. Это не страшно, но выглядит как-то плохо. У кого-нибудь есть идеи, что может быть причиной этого и как это решить? Может быть, у sdk есть какой-то скрытый обратный вызов для готовности сканера, я мог бы скрыть его, пока сканер не скажет, что он готов, а затем показать сканер примерно через 0,5 секунды ...

barcodeReader — это iboutlet для ZBarReaderView, а scanLoading — это iboutlet для представления uiactivityindicatorview, которое анимируется до загрузки сканера. Это единственные настройки, которые отличаются от значений по умолчанию, за исключением, конечно, фрейма, установленного в раскадровке.

[barcodeReader setReaderDelegate:self];
[barcodeReader setAllowsPinchZoom:false];
[barcodeReader start];

/* this works because [barcodeReader start] blocks ui updates until the scanner
   is running, i know it's not a good solution but since there doesn't seem to 
   be a callback or delegate method like scannerDidStart or something it seems 
   to be the only way... */
[scannerLoading stopAnimating]; 

Спасибо за вашу помощь!


person LNS    schedule 22.06.2012    source источник


Ответы (2)


Я только что опубликовал ответ на ответный вопрос:

ZBarReadview с нестандартным размером из StoryBoard, но когда он вызывается, я не задаю его размер

Возможно, ответ также решит вашу проблему.

Вкратце:

При использовании Interface Builder или Storyboard для создания представления и назначения ему ZBarReaderView необходимо установить флажок «Clip Subviews» в свойствах изображения камеры, чтобы сохранить размер представления.

person butters    schedule 23.10.2012
comment
Спасибо, я нашел проблему, она действительно была связана с раскадровкой. Вот что произошло: я переключился с XIB на раскадровки, и он почему-то установил высоту авторазмера... - person LNS; 13.11.2012

Просто добавьте еще один вид, чтобы сделать его как cameraoverlayview с видом изображения, имеющим изображение, требуемая часть которого является прозрачной. Затем в действии кнопки `

// ДОБАВИТЬ: представить считыватель штрих-кода, который сканирует с камеры

 ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;

reader.supportedOrientationsMask = ZBarOrientationMaskAll;

reader.sourceType=UIImagePickerControllerSourceTypeCamera;
//reader.cameraDevice = UIImagePickerControllerCameraDeviceFront;

reader.cameraOverlayView=cameraOverlay;

if( [UIImagePickerController isCameraDeviceAvailable:                         UIImagePickerControllerCameraDeviceFront ])
{
       reader.cameraDevice = UIImagePickerControllerCameraDeviceFront;
}
ZBarImageScanner *scanner = reader.scanner;

reader.wantsFullScreenLayout = YES;
// TODO: (optional) additional reader configuration here

// EXAMPLE: disable rarely used I2/5 to improve performance

[scanner setSymbology: ZBAR_I25
               config: ZBAR_CFG_ENABLE
                   to: 0];
 reader.showsZBarControls = NO; 
// present and release the controller

[самостоятельный PresentModalViewController: читатель анимированный: ДА]; //[appdel.navigationController pushViewController:анимированный читатель:YES];

//[reader.view addSubview:collect];


[reader release];add this and then also add 

`- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info { // ДОБАВИТЬ: получить результаты декодирования id results = [info objectForKey: ZBarReaderControllerResults]; ZBarSymbol *символ = ноль; for(символ в результатах) // ПРИМЕР: просто захватите первый штрих-код break;

 [self rewards:symbol.data];

} `

как метод. Надеюсь, это решит вашу проблему

person hacker    schedule 22.06.2012
comment
Извините, возможно, я не очень хорошо написал свой вопрос, но я хочу, чтобы сканер штрих-кода отображался в другом виде, и он должен быть размером 230x50 пикселей. Все это прекрасно работает и выглядит именно так, как я хочу. Штрих-коды также сканируются правильно. Проблема только в том, что изображение с камеры дергается через раз при запуске сканера - person LNS; 22.06.2012