0

RedLaser SDK を使用しています。私のアプリは分割ビューです。マスタービューコントローラーでバーボタンが押されたときに RedLaser オーバーレイを起動しようとしています。

ボタンが押されるとメソッドが呼び出され、そこから問題が始まります。オーバーレイを起動するコードには 3 つの異なるバージョンがあります。それぞれに独自の問題があります。

オプション 1 これは私のベースラインであり、オーバーレイを初期化していなかったため、機能しないことはわかっていました。次のコードはView Controllerを正しく起動しますが、(明らかに)私が望むことをしません。

     // Working Code that brings up dialog but doesn't start camera overlay
SRSScanVINViewController *scanVINViewController y= [[SRSScanVINViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:scanVINViewController];
[navController setModalPresentationStyle:UIModalPresentationFormSheet];
[navController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentViewController:navController animated:YES completion:nil];
[[UIApplication sharedApplication] setStatusBarHidden:YES];

オプション 2 このコードは、オーバーレイ コントローラーを開始し、クラッシュすることなく起動します。オーバーレイは機能しており、カメラはアクティブです。問題は、viewcontroller/overlay が画面全体を占めていることです。私のコントロール (ボタンなど) はすべて、View Controller が画面の左上部分の一部を占めているかのようにレイアウトされています。オーバーレイのサイズを正しく設定できれば、これは機能します。

      // Working code that shows the overlay (camera on) but the overlay takes the whole screen
SRSScanVINViewController *scanVINViewController = [[SRSScanVINViewController alloc] init];
[pickerController setOverlay:scanVINViewController];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:scanVINViewController];
[navController setModalPresentationStyle:UIModalPresentationFormSheet];
[navController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentViewController:pickerController animated:YES completion:nil];
[[UIApplication sharedApplication] setStatusBarHidden:YES];

オプション 3 この試みは、オプション 2 (上記) の問題を修正することでした。コードは次のとおりです。

     SRSScanVINViewController *scanVINViewController = [[SRSScanVINViewController alloc] init];
[pickerController setOverlay:scanVINViewController];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:pickerController];
[navController setModalPresentationStyle:UIModalPresentationFormSheet];
[navController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentViewController:pickerController animated:YES completion:nil];
[[UIApplication sharedApplication] setStatusBarHidden:YES];

次のエラー (nslog) でクラッシュします。

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:      'Application tried to present modally an active controller <SRSMasterViewController:      0x1f59f540>.'
 *** First throw call stack:
 (0x37ecb88f 0x331fc259 0x30d86441 0x7f6b5 0x7edf7 0x37e253fd 0x30cbfe07 0x30d855e7      0x37e253fd 0x30cbfe07 0x30cbfdc3 0x30cbfda1 0x30cbfb11 0x30cc0449 0x30cbe92b 0x30cbe319      0x30ca4695 0x30ca3f3b 0x3630522b 0x37e9f523 0x37e9f4c5 0x37e9e313 0x37e214a5 0x37e2136d      0x36304439 0x30cd2cd5 0x7deb5 0x7de50)
 terminate called throwing an exception

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

コードは動作するようになりましたが、まだいくつかの問題があります。コードは次のとおりです。

     SRSScanVINViewController *scanVINViewController = [[SRSScanVINViewController alloc] init];
[pickerController setOverlay:scanVINViewController];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:scanVINViewController];
[navController setModalPresentationStyle:UIModalPresentationFormSheet];
[navController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
    pickerControllerPopover = [[UIPopoverController alloc] initWithContentViewController:pickerController];
    [pickerControllerPopover setDelegate:self];
    [pickerControllerPopover setPopoverContentSize:CGSizeMake(320.0f, 460.0f)];
    [pickerControllerPopover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
}
else
{
    [self presentViewController:pickerController animated:YES completion:nil];
}

これにより、ポップオーバーのサイズが元のコントローラー (ペン先で定義) と同じサイズに設定されます。ただし、まだいくつかの問題があります。

コントローラーには、下部のボタン バーに 4 つのボタンがあります。また、UIImage もあります。このコントローラーを初めてロードすると、ボタン (およびボタン バーと UIImage) が見つからないか、奇妙な場所に配置されます。コントローラの外側のどこかで画面に触れてポップオーバー コントローラを閉じ、コントローラを再度ロードすると、すべてのコントロールが適切な場所に配置されます。実際、初回を除いて、常に適切な場所に配置されています。

何か案は?

于 2012-09-08T18:48:37.063 に答える