web-dev-qa-db-ja.com

iPhoneシミュレーターでカメラをテストするにはどうすればよいですか?

デバイスに展開せずにシミュレータでiPhoneカメラをテストする方法はありますか?これは非常に退屈なようです。

110
Sheehan Alam

デバイスでテストする必要があるデバイス固有の機能は数多くありますが、シミュレータを使用するよりも難しくありません。デバイスのデバッグターゲットを構築し、コンピューターに接続したままにしておきます。

実際のデバイスを必要とするアクションのリスト:

  • 実際の電話
  • カメラ
  • 加速度計
  • 実際のGPSデータ
  • コンパス
  • 振動
  • プッシュ通知...
129
Tim

写真のカスタムオーバーレイをテストする必要がありました。オーバーレイは、画像のサイズ/解像度に基づいて調整する必要がありました。

ステファンからの提案に似た方法でこれにアプローチし、「ダミー」カメラ応答をコーディングすることにしました。

シミュレータの実行中に、標準の「captureStillImageAsynchronouslyFromConnection」の代わりにこのダミーコードを実行します。

このダミーコードでは、必要な解像度の「黒い写真」を作成し、パイプラインを介して送信して通常の写真のように処理します。基本的に、非常に高速なカメラの感触を提供します。

CGSize sz = UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]) ? CGSizeMake(2448, 3264) : CGSizeMake(3264, 2448);
UIGraphicsBeginImageContextWithOptions(sz, YES, 1);
[[UIColor blackColor] setFill];
UIRectFill(CGRectMake(0, 0, sz.width, sz.height));
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSData *imageData = UIImageJPEGRepresentation(image, 1.0);

上の画像は、現在のほとんどのデバイスが送信する8MPの写真に相当します。明らかに他の解像度をテストするには、サイズを変更します。

7
Craig

デバッグモードで使用する置換ビューを作成しました。同じAPIを実装し、同じデリゲートコールバックを作成します。私の場合、テストセットからランダムな画像を返すようにしました。書くのはとても簡単です。

1
Stefan Arentz

カメラにアクセスする必要がある一般的な理由は、AppStoreのスクリーンショットを作成することです。

シミュレーターではカメラが利用できないので、良いトリック(私が知っている唯一の方法)は、スクリーンショットを撮る時間だけに、必要なサイズにビューのサイズを変更することです。後でトリミングします。

確かに、より大きな画面のデバイスを使用できるようにする必要があります。

IPadは、すべてのデバイスのレイアウトをテストし、スナップショットを作成するのに最適です。 iPhone6 +のスクリーンショットは少し拡大する必要があります(1,078125でスケーリング-大したことはありません…)

iOSデバイスの解像度のクイックリファレンスへの良好なリンク: http://www.iosres.com/


編集:カスタムカメラビューコントローラーが使用されている最近のプロジェクトでは、AVPreviewを、シミュレーターでの実行にのみ使用するターゲットのUIImageViewに置き換えました。このようにして、iTunesConnectアップロードのスクリーンショットを自動化できます。カメラコントロールボタンはオーバーレイではなく、カメラプレビューのビューにあることに注意してください。

以下の@Craigの答えは、私が非常にスマートであることがわかった別の方法を説明しています-それは私のものとは反対に、カメラオーバーレイでも動作します.

1
Moose

いいえ(3.2でそれを行う方法を追加していない限り、まだチェックしていません)。

1
bpapa