Image view問題

18
日日日日日日日日日日日日 日日日日日日日日日日日日日 2、 日 ImageView 日日 日日日日 日日日日日日日日日 日日日日日日日日日日日 「」 http://ijoko86-devapplication.blog.jp/

description

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

Transcript of Image view問題

Page 1: Image view問題

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

〜 ImageView 編〜

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

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

Page 2: Image view問題

簡単に自己紹介こじろー

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

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

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

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

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

Page 3: Image view問題

完成型

カメラ

ImageView

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

ViewController クラス EditViewController クラス

Page 4: Image view問題

実行の流れ(想定)  

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

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

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

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

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

Page 5: Image view問題

事前準備 

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

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

Page 6: Image view問題

コードの過程  

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

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

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

Page 7: Image view問題

問題発見  

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

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

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

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

Page 8: Image view問題

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

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

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

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

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

Page 9: Image view問題

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

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

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

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

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

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

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

Page 10: Image view問題

流れはこう変わる 

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

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

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

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

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

Page 11: Image view問題

事前準備も変わる 

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

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

Page 12: Image view問題

AppDelegate 内に宣言

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

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

Page 13: Image view問題

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

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

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

Page 14: Image view問題

書き込みまでは OK  

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

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

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

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

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

いけた!

そのまま!

次はココ!

Page 15: Image view問題

遷移後どうするか

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

Page 16: Image view問題

実装…

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

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

…. いけるでしょ!

と、ところが… .

Page 17: Image view問題

あれ?

画像が表示されてない!

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

Page 18: Image view問題

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

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

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

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

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

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

今回はここまで。