アプリの初期化中に、当然のことながら、アプリを実行するために実行しなければならないいくつかの重要なことがあります。たとえば、この場合AVCaptureDevice
、背面カメラのポインターを取得する必要があります。
したがって、失敗した場合 (失敗することはありませんが、わかりません)、UIAlertView
「再試行」という 1 つのオプションだけを表示したいと思います。ユーザーがこれを選択すると、アプリはAVCaptureDevice
再度取得を試みます。
問題は、続行する前にユーザーが「再試行」を押すのを待つ必要があることですが、UIAlertView
モーダルではありません。
このようなコードが 1 つしかない場合は、UIAlertViewDelegate
コールバックで処理できる可能性があります。しかし、このような初期化の重要な部分が複数あるため、本当に混乱することなくコールバックを使用する方法がわかりません。
これを処理するエレガントな方法はありますか?
編集:いくつかのコード:
- (void)setup
{
NSError *error = nil;
// get all the video devices. (this should be the back camera and the front camera.)
NSArray *videoDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
AVCaptureDevice *backVideoDevice;
// find the back camera.
do
{
for (AVCaptureDevice *videoDevice in videoDevices)
{
if (videoDevice.position == AVCaptureDevicePositionBack)
{
backVideoDevice = videoDevice;
break;
}
}
if (backVideoDevice == nil)
{
// display UIAlertView???
}
} while (backVideoDevice == nil);
// if no back camera was found, then we can't continue.
AVCaptureDeviceInput *videoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:backVideoDevice error:&error];
AVCaptureStillImageOutput *stillImageOutput = [AVCaptureStillImageOutput new];
AVCaptureSession *captureSession = [AVCaptureSession new];
if ([captureSession canAddInput:videoDeviceInput])
{
[captureSession addInput:videoDeviceInput];
}
if ([captureSession canAddOutput:stillImageOutput])
{
[captureSession addOutput:stillImageOutput];
}
// etc, etc.
}
最初の手順のように、ほとんどの手順では、成功したかどうかを確認する必要があります。