投稿

storyboard細かいことまとめ

自分が作成するアプリの中でわかった細かいこと segueをソースコードから実行することが出来ます。そのためのsegueをあらかじめstoryboardで作成しておくのですが、viewからはSegueが引けない。ViewControllerからは引ける。ViewControllerから引くやり方はステータスバーからcontrol + ドラッグ。あるいはfile's owner立方体アイコンからドラッグ。 segueの強制実行は [self performSegueWithIdentifier:@"segueの名前" sender:self]; で出来ます。 segue実行時に新しいViewControllerに値を渡したいときは、実行時に走るメソッドの - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ } をオーバーライドします。その中で SecondViewController *secondViewController=(SecondViewController *)[segue destinationViewController]; secondViewController.*** = ***; のようにすればよい ただしpushとmodalの違いがあるようである。 上に書いてあるのはmodalでの仕様。pushはまだよくわからない。 また、新しいViewControllerのviewにUIKit部品を置いてある(storyboardで作成してある)場合、UIKitがインスタンス化されるタイミングに気を付ける必要がある。 prepareForSegueの中では、新しいViewControllerにあるインスタンスは生成されているが、UIKit部品はnil状態なのでアクセスできない。 ”おそらく”実行の順番は 1 performSegueWithIdentifier開始 2 新しいViewControllerのインスタンス化(initなど) 3 prepareForSegue開始 4 prepareForSegue終了 5 UIKitのインスタンス化、画面回転メソッドの呼び出し、viewDidLoadなど 6 performSegueWithId...

Xcode4でのアプリの多言語化

多言語化に関するメモ 多言語化の概要 iOSアプリのローカライズは、ファイル単位で行う。この項目をローカライズしたい時はこのファイル、あの項目をローカライズしたい時はあのファイル、というようにローカライズしたい項目に該当するファイルを多言語化させる。 ファイルをローカライズさせると、言語数の分だけ同じ内容のファイルが出来ます。後は各言語毎にファイルを編集します。 はじめにデフォルトを1つ作って(だいたいの場合は英語)それを複製し、それぞれの言語に対応させることがほとんどかと思います。 ローカライズされたファイルはそれぞれの言語フォルダの中に入れられます。 例 ソースが置いてあるところ/en.lproj/Localizable.strings ソースが置いてあるところ/ja.lproj/Localizable.strings 注意点 ファイルのローカライズ状態には、どうも 1,ローカライズされてない 2,ローカライズされているが、en(英語)のみに対応している 3,ローカライズされていて、複数の言語に対応している の3パターンあるようです。1と2の違いに気づきにくい。1から2への変更の場合、何か操作して何も反応がないように見える場合がよくあります。 具体的なやり方 ローカライズしたいファイルを選択し、ファイルインスペクタ(XCodeの右のほうにあるやつ)でLocalizationを行います。 ローカライズすることが多いであろうファイルは storyboard Icon.png InfoPlist.strings アイコンの下に表示するアプリ名 Localizable.strings ソースコード内のNSStringインスタンス など。 プロジェクトの設定のLocalizationsより言語を追加すると一気に複数のファイルを多言語化します。 すると、iPhone用、iPad用それぞれのstoryboard、それからInfoPlist.strings、Icon.pngなど多言語化されます。なにが多言語化されるかはそのときの構成によって違うようです。多言語化出来るものが見つかればそれを多言語化するような感じです。 Xcode4.2でプロジェクトの設定のLocalizationsで多言語化するものは storyboard icon InfoPlist.strings(デフォル...

FindSpeed申請

FindSpeedを申請した。 日本名が「速度の計算」。 小学校の算数で習う、速度、時間、距離の問題を出すアプリ。 3つのうち2つが与えられて残りの1つを計算で求める。 車が走るアニメーションが問題を解くヒントになる。

Default.pngとスクリーンショット

Default.png iPhone ステータスバー領域含む 縦のみ 横320 たて480 横640 たて920 ratinaは@2xを付ける 縦長iPhoneの568対応は横640 たて1136 Default-568h@2x.png iPad iOS6まではステータスバー含めない。名前決まっている。(「含める」に変更になった? 2014/3) 横748 たて1024 横1004 たて768 iOS7からはステータスバー領域を含むようになった。名前はなんでもいい。 スクリーンショット ステータスバーは含めても含めなくても可。含めないときは-20px(ratinaは-40)のものを用意する 縦横どちらでも可 各言語毎に設定する

iPhone iPad両対応ユニバーサルアプリ

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { // iPad } else { // iPhone or iPod touch(iPhone OS バージョン3.2以上) } #else // iPhone or iPod touch(iPhone OS バージョン3.2未満) #endif

CGContextDrawPathに与えるパラメータについて

イメージ
CGContextDrawPathに与える2つめの引数について調べました。 2つの角丸四角形のパスを書いてからCGContextDrawPathを実行してます。 名前に出てくるEOというのはEven-Oddの略です。Even-Oddというのは偶数・奇数のことです。重なった部分はいくつのパスが囲っているかを調べ、奇数の時は塗る、偶数の時は塗りません。 kCGPathFill 内部を塗ります。 kCGPathStroke 輪郭を書きます。 kCGPathFillStroke 内部を塗って、輪郭を書きます。 kCGPathEOFill 内部を塗るが重なった所は奇数遇数ルールに従う。 kCGPathEOFillStroke 内部を塗って、輪郭を書くが、重なった所は輪郭は書いて内部は奇数遇数ルールに従う。 (追記) SwiftではCGPathDrawingModeになりました。

UIFontのretainCount

[[ UIFont systemFontOfSize :5 0 ] retainCount ]が1をすっとばして2になる。 誰かが初めの1をしている。 状況を勝手にイメージすると UIFontクラス内ですでに全てのサイズごとのインスタンスが用意されていて、それらはすでにretainCountが1。で、自作ソース内で使おうとすると、インスタンスを生成するのではなくてすでにあるものへの参照が渡され、retainCountを+1すると2になるような感じ。 あくまで勝手なイメージなので実際はこれとは誤差があると思います。 調べます。 調査プログラム NSLog ( @"%d" ,[[ UIFont systemFontOfSize : 50 ] retainCount ]); NSLog ( @"%d" ,[[ UIFont systemFontOfSize : 50 ] retainCount ]); NSLog ( @"%d" ,[[ UIFont systemFontOfSize : 50 ] retainCount ]); NSLog ( @"%d" ,[[ UIFont systemFontOfSize : 50 ] retainCount ]); NSLog ( @"%d" ,[[ UIFont systemFontOfSize : 50 ] retainCount ]); とやると 2 3 4 5 6 と出てきます。どうやらインスタンス(と呼ぶのかどうかわかりませんが)を使い回ししてます。 ちなみに NSLog ( @"%d" ,[[ NSString   stringWithFormat : @"abc" ]  retainCount ]); NSLog ( @"%d" ,[[ NSString   stringWithFormat : @"abc" ]  retainCount ]); NSLog ( @"%d" ,[[ NSString   stringWithFormat : @"abc" ]  reta...