スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


このエントリーをはてなブックマークに追加

カメラ起動中の画面に別のビューを表示

簡単3Dカメラが販売開始になって一週間が過ぎたので、そろそろアップデートを行うことにした。
今回の修正は、カメラ起動中のライブビュー画面に追加情報を表示することに決定。

グリッドと前回撮影時の写真を背景に薄く表示させるのが目標。

とりあえずこんな(↓)完成イメージ
CAPTURE-5-CAMERA-BACK.png

少し分かりにくいが、左目位置で撮影した画像をライブビュー上に薄く表示させたい。
このプログラムが結構ハマったので、忘れないうちにメモしておこう!

まずはカメラを起動したビューのnibファイルにビューのレイアウトを作成する。ビューの構成はこんな感じ。
 オーバーレイの土台となるビュー(viewOverlay)
  + グリッドの絵を設定したイメージビュー
  + 写真を薄く表示するためのイメージビュー
  + グリッドの濃さを調整するためのスライダー
  + 背景を薄く調整するためのスライダー

これを、イメージピッカー作成時のプロパティにセットする。


// イメージピッカーを作る
UIImagePicker* imagePicker;
imagePicker = [[CustomImagePicker alloc] init];
[imagePicker autorelease];
imagePicker.sourceType = sourceType;
[imagePicker setAllowsEditing:YES];
imagePicker.delegate = self;

// オーバーレイビューの設定
[imagePicker setCameraOverlayView:viewOverlay];


完成~!ついでにスライダーの操作で透明度を変化させるコードも追加する。
なんだ、簡単じゃん! ・・・って思ってたら罠があった。。
撮影中にホームボタンを押してバックグラウンドから戻ると、スライダーが効かなくなってしまった。

どうやら、バックグラウンドに入る直前、イメージピッカーのビューが解放され、呼び出し元のビューがロードされていた。ここで、オーバーレイのビューは「呼び出し元」のビューのnibファイルで作成していたため、Outletで関連付けていたビューが再生成され、アドレスが変わっていた。元のビューのオブジェクトは、ライブビュー上に表示されたままので解放されることはないが、Outletのポインタが書き換えられたため、リークしたまま制御不能になっていた。(・・・んだと思う)

一体どこでレイアウトを定義すれば良いか散々悩んだが、解決方法が書かれた記事を発見!
http://trackback.blogsys.jp/livedoor/tek_nishi/2971478

UIImagePickerControllerクラスをサブクラス化すれば良かったんですね!

ということで、

@interface CustomImagePicker : UIImagePickerController {
UIView *viewOverlay;
   :
   :
}


こんなクラスを作って、このnibファイル内にオーバーレイするビューのレイアウトを作成。Outletのプロパティもこのクラスに作った。

nibファイルの生成処理も、参考記事にならって作成、

- (void)viewDidLoad {
  [super viewDidLoad];
  [[NSBundle mainBundle] loadNibNamed:@"CustomImagePicker" owner:self options:nil];
}


一方、オーバーレイの設定はこんな感じ。

// ビュー表示時の処理
- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];
  // 入力ソースが「カメラ」の場合
  if (self.sourceType == UIImagePickerControllerSourceTypeCamera) {
    // オーバーレイビューの設定
    [self setCameraOverlayView:viewOverlay];
  }
}


そしてCustomImagePickerの呼び出し部分。

CustomImagePicker* imagePicker;
imagePicker = [[CustomImagePicker alloc] init];
[imagePicker autorelease];
imagePicker.sourceType = sourceType;
[imagePicker setAllowsEditing:YES];
imagePicker.delegate = self;


これで、表示されているビューとプロパティの参照オブジェクトが狂うことは無くなった!

iOS4じゃなきゃ発生しにくい問題だけど、逆に発見できて良かった。。



このエントリーをはてなブックマークに追加

テーマ : プログラミング
ジャンル : コンピュータ

コメント

非公開コメント

iPhoneアプリ紹介
パズルナビ for パズドラ 2016
最強のコンボツール!
colorization-large-icon.png

スクリーンショットを読み込むとコンボを自動計算してくれるパズドラの攻略アプリです。


AirRuler
(簡易距離計)

リモートで簡単に距離を測定できるアプリ!
colorization-large-icon.png

目標地点に向けてiPhoneを傾けるだけで簡単に距離を測定できます。ゴルフの距離測定機能付きパターの代わりにも使えます。


補色残像アート
~見えない色が見えてくる~
白黒なのにカラーに見えてしまう不思議な映像を体験しよう!
colorization-large-icon.png

補色残像という目の錯覚を利用して、白黒写真がカラーに見える不思議な映像を作成できます。作成した映像は、アニメGIFに変換したり、Twitterに投稿することもできます。


タイピング革命
フリック練習はタイピング革命で!ネットランキングで盛り上がろう!
icon-l-typing.jpg

オンラインランキング上のプレイを閲覧できるリプレイ機能付き!フリック入力とローマ字入力に完全対応したタイピング練習アプリです。初心者も安心のトレーニングモード付き。

★なんと!あのAppBank様に紹介して頂きました!!
typing-sale-led.gif


簡単3Dカメラ
iPhoneで手軽に3D写真を楽しもう!平行法/交差法/アナグリフ/グラグラ3Dに対応。
icon-l-3d.jpg

2枚の写真を撮影するだけで、裸眼で立体視できる3D写真が作成できます。85円でステレオ写真もアナグリフも楽しめるのは簡単3Dカメラだけ!

プロフィール

あらきんぐ☆

Author:あらきんぐ☆
はじめまして。あらきんぐです。
4月からiPhoneを購入し、その魅力に取り付かれて、気がついたらアプリ開発の道へ!仕事でプログラム開発をしていますが、基本「動けばOK!」な適当エンジニアです。適当でもアプリは作れる!っていう事を、ブログを通じて証明していきたと思います。

最新記事
最新コメント
最新トラックバック
カテゴリ
FC2カウンター
全記事表示リンク

全ての記事を表示する

Twitter
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
アクセスランキング
[ジャンルランキング]
コンピュータ
329位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
43位
アクセスランキングを見る>>
オススメ商品
iPhone/iPodと一般オーディオを繋ぐ貴重なアイテム!
アプライドオリジナルアイテム MBB...

アプライドオリジナルアイテム MBB...
価格:3,980円(税込、送料別)

開発中級者にオススメ!「こんなことができるんだ!」と驚かされる一冊
【送料無料】iPhone...

【送料無料】iPhone...
価格:1,500円(税込、送料別)

安い!シンプル!カッコいい!
希少なiPhone対応キーボード内蔵ケース
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。