iPhoneアプリ開発学校に通う生徒のおおまかな学習日報

Objective-C初心者。iPhoneアプリ開発学校に通う落ちこぼれです。授業の内容を記録しているのですが時間の都合でおおまかに書いてます。投稿内容は参考にしちゃだめです。

【木曜日】FMDB

睡眠時間約6.5時間。

今日はSQLiteのデータベースを使ってなにかするらしいです。
Objective-CSQLiteの機能を使用できる様にしたFMDBというライブラリを使うらしいです。

▼FMDBの配布先
https://github.com/ccgus/fmdb

ダウンロードして解凍してsrcフォルダの中の「fmdb.m」以外のファイルをプロジェクトにコピーする。

▼新しくグループ(フォルダ)を作ってそこにファイルを入れる
f:id:jaam:20131107141145p:plain


▼プロジェクトの設定画面のBuild Phasesタブに下記を追加
f:id:jaam:20131107141153p:plain


▼入ってることを確認する 入ってなかったら+ボタンで追加する
f:id:jaam:20131107141159p:plain

↓ViewController.mに下記を追加

#import "FMDatabase.h"


↓viewDidLoadにこれを追加

    //データベース名
    NSString *databaseName = @"test.db";
    //データベースファイルを格納するために文書フォルダーを取得
    NSString *workPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    //データベースファイルパスの取得
    NSString *databasePath = [workPath stringByAppendingPathComponent:databaseName];
    //NSLog(@"データベースファイルのありか%@", databasePath);
    
    //データベースのオープン
    FMDatabase *db = [FMDatabase databaseWithPath:databasePath];
    [db open];
    //SQL文の実行とデータの取得
    FMResultSet *result = [db executeQuery:@"select datetime('now', 'localtime')"];
    //カーソルを先頭へ
    [result next];
    //先頭行の1列目のデータを取得
    NSString *str = [result stringForColumnIndex:0];
    //結果を表示してみる
    NSLog(@"データベースから得た今の時間は%@です。", str);
    //データベースを閉じる
    [db close];


↓RUNすると下記がコンソールに出る。

2013-11-07 09:29:23.593 20131107_FMDB_SQLiteEx[2055:11303] データベースから得た今の時間は2013-11-07 09:29:23です。

次に、コンソールではなくシミュレーターの画面に表示してみたり。


▼あ、エラーが出てしまった
f:id:jaam:20131107141213p:plain

Property 'textView' not found on object of type 'ViewController *'

↓先生に教えてもらって解決!

self.textView.text = str; // 間違い
self.text.text = str; // 正しい


▼はい、でけました
f:id:jaam:20131107141222p:plain


▼データベースへの命令は下記のようにopenとcloseの間に書くのだ!

[db close];
// テーブルの作成
BOOL success = [db executeUpdate:@"create table testdb(id integer primary key,name text)"];

if( success == YES ) {
    NSLog(@"テーブル作成成功");
} else {
    NSLog(@"テーブル作成失敗");
}
[db open];


その他、INSERT文を使ったりもしました。
SQliteはだいぶ前に習ったので記憶がほとんど無くなってる…
予習しとけば良かった。

この授業、先生への質問がいつもより多いのでみんな苦戦している模様。
私も苦戦中。


午後の授業開始。
次に、リソースに以前作ったtest.dbファイルを追加してそれを読み込む勉強。

▼でけた
f:id:jaam:20131107141231p:plain


次に、前に作ったおみくじプログラムを呼び出してみる。
(前に作ったと言ってもこのブログをはじめる前のことだが)

↓こんなテーブルなのです

sqlite> select * from omikuji;
1|大吉|何かいい事あるかもねでげす!
2|小吉|まあまあですでげす
3|吉|普通が一番でげす
4|凶|ある意味ラッキーでげす
5|中吉|そこそこラッキーでげす
6|大凶|段差に気を付けて、転びますでげす!
sqlite> 

▼でけた
f:id:jaam:20131107141239p:plain

構文は以前SQliteをやったときに学んだrandom関数をテキストファイルに残しておいたのでコピペで楽勝!


そんなこんなで本日の授業終了。
もうちょっと込み入ってアプリっぽくしたい場合は先生があとで用意するコードを参考にすること。
今日はSQliteのコピペメモが大変役に立った日でありました。


以下、要復習。
・先生の用意したコードを見てみること

【水曜日】アプリケーションのローカライズのつづきとARC

睡眠時間5.5時間。

今までは日本語版と英語版のStoryboardが独立しており面倒だったが、基本となるStoryboardファイルを定義して他の言語はStoryboardの文字の部分だけをLocalizable.stringsで定義する方法。
もちろん意味わかってません。


▼プロジェクトの設定画面のここにチェックを入れる
f:id:jaam:20131106150519p:plain

▼そうするとStoryboardの(English)が(Base)に変わる
f:id:jaam:20131106150527p:plain

▼MainStoryboard.storyboardのファイルインスペクタのLocalizationのJapaneseをLocalizable Stringsに変更する
f:id:jaam:20131106150531p:plain

▼いまこんなかんじ
f:id:jaam:20131106150537p:plain

上記のやり方に沿って新しく追加したら反映されなかった… およよ
(放課後に先生に聞いたら、アプリを一度削除してから入れ直すと反映されるとのことで、やってみたらできた。そういえば授業中にそんなことを聞いた気がする。上の空ですいません)


次に、ARCの勉強。
ARCとは、コンパイル時にObjective-Cオブジェクトのリファレンスカウンタ操作(retain/release/autorelease/dealloc)を自動挿入する機能だそうです。
ちんぷんかんぷんです。

プロジェクトを作ったらautoreleaseをするなどの作業を省略できるらしい。

眠い眠い眠い眠い。

とりあえず、配られたプリント用紙に書かれたコードを打つ。
新規プロジェクト作成の際にUse Automatic Reference Countingにチェックを入れること。

↓こんなかんじだけど合ってるかどうかはわからない…

@interface ViewController ()
{
    
    // 強い参照(所有する) ここに入れればリテインされる
    __strong MyClass *_myClass1;
    
    // 弱い参照 保持してはならない状態になる 解放される設定
    __weak MyClass *_myClass2;
    
    // 安全でなく所有しない 弱い参照よりもひどい
    __unsafe_unretained MyClass *_myClass3;
    
}

すいません、わかりません。


その後もしばらくわからない状態が続く。
教科書に記載されたコードを打つも、わからなすぎてキャプチャーを撮る気にならず…

そして、配られたプリント用紙に書かれたコードを打つ。

▼こんなんできました
f:id:jaam:20131106150545p:plain

iPadからの線を切るをタップするとこうなる
f:id:jaam:20131106150550p:plain

iPhoneからの線を切るをタップするとこうなる
f:id:jaam:20131106150557p:plain

▼ViewControllerからの線を切るをタップするとこうなる
f:id:jaam:20131106150604p:plain

うーん。はてながいっぱい。
太陽がいっぱい
本日の授業終了

【火曜日】アプリケーションのローカライズ

睡眠時間6.5時間。

11月に入りました。
授業を受ける日は残りあと5日となりました。
それ以降の日は、キャリアコンサルティングが1日と、約卒業制作のアプリを作る日が約9日です。

話は変わって、ちょっと訂正なんだけど、卒業制作のテーマは「素敵にくだらないアプリ」でした。
「くだらないアプリ」ではなかった。
まっ、同じようなものかな。。
で、自分が作りたいアプリがある場合は「素敵にくだらないアプリ」を短時間で作って残りの時間を使って作るのもアリとのこと。
私は今朝、「素敵にくだらないアプリ」を思いついたのでそれを作ろうと思う。
ただ、リジェクト(公開拒否)されるかもしれないので禁止項目をあとで確認しておこう。


で、授業開始。
アプリケーションのローカライズの勉強。
アプリを様々な言語で利用できる様にする方法のことをいうそうです。
これは教科書には載ってません。
とりあえず先生がお手本でやるのを真似します。

▼まずStoryboardでボタンなどを作る
ボタンの名前は自分で書いちゃだめなので右側から選択すること
f:id:jaam:20131105114249p:plain


▼プロジェクトの設定画面でアイコンを追加する
f:id:jaam:20131105114254p:plain


▼ラベルやスイッチやボタンなどなどを普通に追加
これらのボタンの名前も自分で書いちゃだめなので右側のなんちゃらインスペクタから選択する
f:id:jaam:20131105114258p:plain

▼プロジェクトの設定画面のInfoのLocalizationsにJapaneseを普通に追加
f:id:jaam:20131105114304p:plain


▼左側を見るとファイルが増えてることを確認
f:id:jaam:20131105114309p:plain


▼RUNするとボタンの文字が日本語表記になるのだ
f:id:jaam:20131105114313p:plain


▼シミュレーターの設定で言語をEnglishにすると、
f:id:jaam:20131105114318p:plain


▼英語表記になるのだ
f:id:jaam:20131105114323p:plain


▼言語が日本語の時だけラベルを変えたいときは左側からJapaneseを選んでラベルに日本語を入力する
f:id:jaam:20131105114329p:plain


▼HOME画面に出るアプリの名前はここで変える
デフォルトだとプロジェクト名になる
f:id:jaam:20131105114334p:plain


▼これを選ぶと、
f:id:jaam:20131105114339p:plain


▼本当の名前が出る(よくわかってないけど…)
f:id:jaam:20131105114344p:plain


▼ここにこれを書くと
f:id:jaam:20131105114348p:plain

↓これね

CFBundleDisplayName="日本向け";


▼言語が日本語のiPhoneではこうやって表示される
f:id:jaam:20131105114430p:plain


▼言語が英語だとプロジェクト名が出る
f:id:jaam:20131105114435p:plain

※表示がおかしいと思ったらXcodeをProduct->Cleanした後、アプリを再インストールしてみること


次に、ソースコードの中で使う文字のローカライズの勉強。
NSLocalizedString関数を使うそうです。


▼まず、Storyboardのラベル2つとViewController.mファイルをつなげる
※MainStoryboard.storyboard(English) と MainStoryboard.storyboard(Japanese)両方やること
f:id:jaam:20131105114441p:plain

↓で、ViewController.mファイルのviewDidLoadに下記を追加

_label1.text = NSLocalizedString(@"May the Force be with You", nil);
_label2.text = NSLocalizedString(@"Don't think feel", nil);


▼そして、新規ファイルをこんなかんじで作る
f:id:jaam:20131105114446p:plain


▼ファイル名はこれで
f:id:jaam:20131105114452p:plain


▼これで
f:id:jaam:20131105114457p:plain


▼これもんで〜
f:id:jaam:20131105114502p:plain


▼これを書き〜の
f:id:jaam:20131105114507p:plain

↓で、ViewController.mファイルのviewDidLoadに下記を追加

"May the Force be with You"="フォースと共にあらんことを";
"Don't think feel"="考えるな、感じろ";


スターウォーズですね先生。


▼がしかし、早くてついていけない…
言語が英語だとこうなります
f:id:jaam:20131105114517p:plain


▼言語が日本語だとこうなります
f:id:jaam:20131105114523p:plain


本日の授業終了。はやっ!
今日は午後から就職活動なので、またハローワークに行って求人票をプリントアウトしてきます。
ラクチンだ〜。

【木曜日】レイヤーアニメーションのつづき

睡眠時間は、ちょいちょい起きたりして8時間。よく寝たほう。
今日はブラックコーヒーを買ってきたので飲んでみます。
居眠りしませんように。

まず、先生からのお話。
卒業制作の期間について設けられた日数は、たった9日間になりました。
本来は1ヶ月くらい設けてあったんだけどね、授業が押しちゃったので。
制作テーマは「くだらないアプリ」らしい。
その理由は、くだらないアプリはスキル云々に関係なくできるから。らしい。たぶん。

私は作りたいアプリがあったんだけど実用的なものなので、くだらないアプリをこれから考えなくては。
主役はやっぱり「う○こ」にするかな。

あと、このiPhoneアプリ制作のクラス、今までのクラスの中で遅刻が多いほうらしい。
確かに私も含め遅刻や欠席が多い。
残りあと1ヶ月。気を付けよう。

あと、Objective-Cの知識は他の言語でも活かせるのでiPhoneアプリ開発会社に就職を考えてなくても、授業を諦めちゃいけないよ。

さて授業です。
昨日のレイヤーアニメーションの続きで、画像を回転させたりする勉強。

▼これは画像を簡単に角丸水産(おやじギャグ?)にした例
f:id:jaam:20131031162658p:plain

↓コード

layer.cornerRadius = 10; // 丸める度合い
layer.backgroundColor = [UIColor blueColor].CGColor; // 背景色
layer.borderColor = [UIColor orangeColor].CGColor; // 境界線の色
layer.borderWidth = 3; // 境界線の太さ


▼ドロップシャドウをつけた例
f:id:jaam:20131031162710p:plain

↓コード

layer.shadowColor = [UIColor blackColor].CGColor; // 影の色
layer.shadowOffset = CGSizeMake(3, 3); // 光のあたり方
layer.shadowRadius = 5; // 影の大きさ
layer.shadowOpacity = 0.8; // 影の濃さ


▼他にも、レイヤーをクリックするとそのレイヤーの背景に色(cyanColor)をつけたり
f:id:jaam:20131031162730p:plain


次に、ジェスチャー検知を使う演習。
レイヤーの操作を可視化するためにピンチ(二本指で縮めたり拡げたり)、スワイプ(1本指で縦や横にシュっと)、ローテーション(二本指で回転)などの動作を検出する機能を使うそうです。
よくわかってないけど、とりあえず配られたプリント用紙に書かれたコードを打つ。

午後の授業開始。

引き続き、配られたプリント用紙に書かれたコードを打つ。
そして、できました。

▼最初の画面
f:id:jaam:20131031162736p:plain

▼下方向へスワイプしました 検知して文字が出る(コンソールでもNSLogを出してる)
f:id:jaam:20131031162743p:plain

▼左方向へスワイプしました 検知して文字が出る
f:id:jaam:20131031162751p:plain

▼optionボタンを押しながら円を描くように動かしてローテーション(rotateは回転という意味)を検知して文字が出る
f:id:jaam:20131031162758p:plain

▼optionボタンを押しながら動かしてピンチしました 検知して文字が出る
f:id:jaam:20131031162806p:plain


次に、ジェスチャーで画像の大きさをコントロールする演習問題。
配られたプリント用紙に書かれたコードを打つ。

できた。

静止画だとわからないけど「右スワイプによる画像の回転」「ピンチイン・ピンチアウトによる拡大縮小」「ローテーション」「長押し+ドラッグによる移動」ができるのだ

▼最初の画面
f:id:jaam:20131031162931p:plain

▼ピンチイン
f:id:jaam:20131031162938p:plain

▼ピンチアウトしてからローテーション
f:id:jaam:20131031162945p:plain

▼長押し+ドラッグで移動
f:id:jaam:20131031164522p:plain


本日の授業これにて終了。
ブラックコーヒー効いてるみたいで寝なかった!

その後、2時間“残業”ならぬ“残勉”をしましたとさ(休んだときにやった部分の復習と、今日習った部分をブラッシュアップした)。

あと、スワイプはif文でまかなえるらしい。
こんなかんじで。(画像貼付けでごめんなさい。本当はテキストで書きたいとこだけど時間がなくて)
f:id:jaam:20131031170022p:plain

本屋でバッタリ

今日の課題問題、というか、最近の課題問題が難しくて参っている。 問題の中に今までの勉強の応用がいくつか入っているため、記憶を辿ったり、ソースを探したり、理解したりするのに苦労している。 絶対に一人で解けない自信アリだ。

今日も難しかったわけで、放課後に1時間ほど勉強した。 駅に向かう途中に「このまま理解できてないのもマズイので本でも買おうかしら」と思い、本屋のiPhoneアプリ関連の棚へ向かった。

すると偶然、隣の席のTちゃんが棚の前にいるではないか。

Tちゃんもここ最近の課題の難しさに参って本を物色しに来たらしい。

なんか安心した。 いやいやいやいや、しちゃダメだ!

ということで「Objective-Cの絵本」という書籍を買いました。 わかりやすそうな本を厳選した結果、他にも気になるものが2冊あって迷ったんだけど、1880円という値段が決め手です。

さぁ、読もうではないか。

【水曜日】トランジションとレイヤーアニメーション

睡眠時間6.5時間。

トランジションの勉強。
トランジションとは、ビューから別のビューに遷移させる時のエフェクトのことだそうです。
で、教科書に記載されたコードを打つ。

▼この画面が別の画面になるときに発生するエフェクトなんだけど
キャプチャーを撮りたかったけど、一瞬のことなので撮れず…
f:id:jaam:20131030145832p:plain

画面がトランプのように横にめくれて別の画面に変わるエフェクトとページめくりなエフェクトの2種類を勉強した。

↓画面がトランプのように横にめくれて別の画面に変わるエフェクト

transition=UIViewAnimationTransitionFlipFromLeft; // フリップ(左)
transition=UIViewAnimationTransitionFlipFromRight; // フリップ(右)

↓ページめくりなエフェクト

transition=UIViewAnimationTransitionCurlUp; // ページめくり(上)
transition=UIViewAnimationTransitionCurlDown; // ページめくり(下)


眠い。なんだか眠い。
ミンティアを食べ忘れると眠くなる。


次に、TransitionCurlUpを使ってひめくりカレンダーを作る課題。
よーい、どんぶらこ。

苦戦中。途中までできたけど、その先が進めない…

まだ生徒の半数がひめくりカレンダーを完成させてないのにタイムリミットがきてしまった。
いつもはそんなに足早に進めないんだけど、授業の時間が詰まっているらしい。
これは、要復習だ。


次に、レイヤーアニメーションの勉強。
レイヤーってお絵描きするソフトに出てくるあのレイヤーらしい。
レイヤーアニメーションを利用するには、ライブラリ「QuartzCore.framework」が必要。

で、教科書に記載されたコードを打つ。
Y軸を中心に画像が動く。

▼でけました(動きがわかりづらいので3回ほどキャプチャー撮りました)
f:id:jaam:20131030145950p:plain
f:id:jaam:20131030145957p:plain
f:id:jaam:20131030150003p:plain

わかる?わかるかなこの動き?

授業終了。

以下、要復習。
・日めくりカレンダーを完成させる

【火曜日】UIViewアニメーション

睡眠時間7.5時間。

1時間遅刻してしまった。
最近ほんと、たるんどる。


昨日の続きで教科書に記載されたコードを打つ。

▼でけました(ボタンを押すと画像が動くんだけどこれは静止画なので動きません)
前にかいたおばけの絵
f:id:jaam:20131029145045p:plain

▼ボタンを透過にしたり、角度を変えたり…(おまぬけ)
f:id:jaam:20131029145058p:plain

その他、iPhoneの向きを変えても画像の向きは変わらない設定にする勉強をしました。


午後の授業開始。
ボタンを押すと雪の結晶が上から下に消えながら落ちるアニメーションを作る課題。
ランダムなx軸から落ちるようにして、雪はだんだん小さくなって半分の大きさにすること。

よーい、どん。

ボタンを何回も押すと結晶が何個も落ちるようにしたいんだけど、落ちてる途中でボタンを押すと結晶が消えてしまうのはなぜ?
少し先生に教えてもらってから自分で解決した。

▼上から結晶(ではなく米にしてみました)が降ってきます
連射すればたくさん降ってくる〜
f:id:jaam:20131029145107p:plain

▼画像を入れ替えてみた うんこが降ってくる〜
そういえば昔、はじめてFLASHで動く絵を書いたときに同じようなものを作ったなぁ
f:id:jaam:20131029145253p:plain

▼大きさを変えてみたり
f:id:jaam:20131029145319p:plain

▼ボタンの角度を変えて雰囲気を出してみたり
f:id:jaam:20131029145349p:plain

そんなこんなで今日は楽しく授業終了♪