Image view問題

Post on 27-Jun-2015

272 views 0 download

description

今度こそ本気出して「アプリ開発」やってみる カメラ+画像加工アプリの機能を作ろうと思ったら、意外とすぐにつまづきました。 今回は、画面遷移と変数の受け渡しについて、問題と解決策を整理しました。

Transcript of Image view問題

2日間分からなかったので、問題を整理して解決を試みる

〜 ImageView 編〜

こじろー今度こそ本気だして「アプリ開発」やってみる

http://ijoko86-devapplication.blog.jp/

簡単に自己紹介こじろー

プログラミング経験ほとんどなしの会社員

(唯一 Excel VBA だけ経験あり)iPhone アプリに挑戦中!

しかし、カメラを使ったアプリに苦戦中…

ブログやってます▶︎ 今度こそ本気出して「アプリ開発」やってみる

Twitter もやってます。▶︎ クリック!

完成型

カメラ

ImageView

カメラボタン押す ▶︎  次の画面へ遷移しつつ、撮影した画像を次の画面に表示

ViewController クラス EditViewController クラス

実行の流れ(想定)  

1.カメラボタン押されることにより、カメラを呼び出す。  カメラで撮影した画像を ImageView のプロパティに保存。

2.画面遷移( ViewController クラスから EditViewController クラスへ)

3.画像表示する。   ImageView に画像を表示する。

1.カメラボタン  カメラ呼び出し、画像取得2.遷移  画面の遷移3.画像表示   ImageView に画像の貼付

こんな感じになる… . と思ってた。

事前準備 

☝️ の画面は以下のようにしてできました。

1.カメラボタンの作成2.新たに ViewController 、クラスファイルを作成し、 EditViewController とする3. EditViewController に ImageView を作成4.カメラボタンで、 EditViewController に遷移するようにセグエ5.カメラボタンから、 ViewController.m に接続。メソッド作成(カメラ出す、画像取得する)6. ImageView のプロパティを EditController に作成する

コードの過程  

1.カメラボタン押されることにより、 ViewController クラス内で以下のメソッドを実行

1.カメラボタン  カメラ呼び出し、画像取得2.遷移  画面の遷移3.画像表示   ImageView に画像の貼付

(コードはテキストのまんま。ここは問題なし)

問題発見  

1.続いて、カメラ部での処理内容… . のはずが…

1.カメラボタン  カメラ呼び出し、画像取得2.遷移  画面の遷移3.画像表示   ImageView に画像の貼付

(エラー。 imageView プロパティは ViewController クラスに見つかりません?)

そりゃそうだ。 imageView プロパティは別のクラスで宣言してる!(EditViewController クラスで )

問題とは   1.カメラボタン  カメラ呼び出し、画像取得2.遷移  画面の遷移3.画像表示   ImageView に画像の貼付

問題▶︎  画像の保存先のプロパティは、撮影とは別のクラスにあった!

解決策▶︎別のクラスにあるプロパティを使えるようになればいい!

具体的に何する?? ▶︎ 検索検索!

Xcode 、別のクラスでプロパティ… .

… で引っかかったのがこちら。(えくせぷしょんこーど。 様)

解決策▶︎別のクラスにあるプロパティを使えるようになればいい!

AppDelegate に変数書いて参照すれば良い。

以下、自分で分からなくて調べたこと(いや、そっからかよ…ってツッコミはなしで☆)

AppDelegate   ▶︎ クラス。 Project 作ったらあるやつ。            アプリの起動時や、バックグラウンド時の処理を担当してる。            (変数を格納できる、という認識はなかった)

変数書いて   ▶︎ @property で宣言。            ちなみに、画像を保存したい場合は?            👉 UIImageView クラスのインスタンス変数を作成。

参照すれば   ▶︎ AppDelegate クラスを呼び出して、変数を利用可能にする?           (たぶんそんなイメージ)

流れはこう変わる 

1.カメラボタン押されることにより、カメラを呼び出す。カメラで撮影し、 AppDelegate を呼び出す。画像を ImageView のプロパティAppDelegate 内の変数に保存。

2.画面遷移( ViewController クラスから EditViewController クラスへ)

3.画像表示する。 AppDelegate を呼び出して。   ImageView に画像を表示する。

1.カメラボタン  カメラ呼び出し、画像取得2.遷移  画面の遷移3.画像表示   ImageView に画像の貼付

画面遷移の前後(別クラス)で AppDelegate を呼び出し、変数を利用する。

事前準備も変わる 

☝️ の画面は以下のようにしてできました。

1.カメラボタンの作成2.新たに ViewController 、クラスファイルを作成し、 EditViewController とする3. EditViewController に ImageView を作成4.カメラボタンで、 EditViewController に遷移するようにセグエ5.カメラボタンから、 ViewController.m に接続。メソッド作成(カメラ出す、画像取得する)6. ImageView プロパティを EditControllerAppDelegate.h に作成する

AppDelegate 内に宣言

UIImageView クラスの imageView 変数を宣言。

▶︎ これにより、他のクラスで画像のデータを読み書き可能に!

Appdelegate の呼び出しまず、ヘッダファイルを読み込み…

コードを書き足したら、エラーでない!!バンザイ!!!

ここでは、カメラ撮影した画像を image 変数(ここで宣言)に保存し、呼び出したデリゲートの imageView 変数に、画像を格納してます。

書き込みまでは OK  

1.カメラボタン押されることにより、カメラを呼び出す。カメラで撮影し、 AppDelegate を呼び出す。画像を ImageView のプロパティAppDelegate 内の変数に保存。

2.画面遷移( ViewController クラスから EditViewController クラスへ)

3.画像表示する。 AppDelegate を呼び出して。   ImageView に画像を表示する。

1.カメラボタン  カメラ呼び出し、画像取得2.遷移  画面の遷移3.画像表示   ImageView に画像の貼付

画面遷移の前後(別クラス)で AppDelegate を呼び出し、変数を利用する。

いけた!

そのまま!

次はココ!

遷移後どうするか

遷移したら、画像を表示すれば良い。▶︎ ボタンとか押さずに、すぐに表示したい▶︎ ViewDidLoad ?

実装…

画面が変更した際に、実行される!

さっきと同じように、 AppDelegate を呼び出して、imageView 変数(画像保存してある)の画像データを、表示部に写す!

…. いけるでしょ!

と、ところが… .

あれ?

画像が表示されてない!

いやいや、それ以前にカメラが表示されない!

ちょっと休憩&感想まずは「変数を次のビューに渡す」ということはできた(と思われる)

けっこう記述とかに苦労してたり…(基本を理解できてない証拠)

やっぱりやってみないとわからない(文章読むだけじゃ無理ー)やってみることで、色々と理解できた

自分の考えてることを文章で起こすのは重要(自分の頭で回しきれないので…パワポは図も作りやすく、重宝します)

▶︎ 次の課題は「遷移とコードの順序」!

たぶん、遷移とコードを同時に入れると、順番ごっちゃになるんじゃないかな?

今回はここまで。