サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
kontonsoft.blog.shinobi.jp
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 KigenをiPad対応にするために問題になったのが、標準のTabBarは表示中に回転しないということでした。でも、実はこの問題には簡単な解決方法があります。それはTabBarControllerのカスタムクラスを作り、それを回転対応にしてしまう事です。このように書くと何だか物凄い事をしているように思ってしまう人もいるかもしれませんが、実際の作業量は少ないです。 1.まずTabBarControllerから派生したクラスを作成します。ここではRotatableTabBarControllerとします。 2.shouldAutorotateToInterfaceOrientation:でTabBarの下部にあるviewControllerにもshouldAutorotateToIn
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 1つのコードで全てのiPhone OSデバイスをサポートできればソースコードの管理が楽になります。今回の記事はそんな方法を紹介します。今後のことは分かりませんが、現状ではこの分岐方法を使えば全てのデバイスに対応するコードが書けます。まず例としてコードの一部を示します。 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { // iPad UIGraphicsBeginImageContext(CGSizeMake(900.0,675.0)); } else { // iPhone or iPod touch(iPhone OS
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 Xcodeで新規作成時にTab Bar Applicationを選ぶと、画面の下にTab Barがあり、2つのビューを切り替えて表示できる状態になります。さて、ここでそれぞれのビューへの参照はどうすれば得られるのでしょう。これを考える時、Interface Builderがヒントになります。View Modeを中央のツリー表示に切り替えてみましょう。Tab Bar Controllerが一番上の階層にあります。その下にそれぞれのView Controllerがぶら下がっています。それぞれのView ControllerをNavigation Controllerに変えた場合には、Tab Bar Controllerが一番上にあるままで、その下がNavigation Control
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 テーブルの各セルの右側には、アクセサリーと呼ばれるパーツを配置することができます。これを実現するのに使うのがaccessoryTypeForRowWithIndexPath:です。とりあえず例によって実際のコードから引っ張ってきましたので、まずはそれを見てみましょう。 - (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath { return (self.editing) ? UITableViewCellAccessoryDetailDisclosureButton : UITableVi
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 iPhoneアプリケーション開発において、軽い処理のものを書いているうちは問題ないのですが、時間のかかる重い処理をさせる場合、実機単体で実行させた時に、通常のコンピューター用で書くなら特に問題がないはずのコードでも途中で止まってしまう事があります。それはWindowsで言えばマウスカーソルが砂時計になる処理、Macで言えばマウスカーソルが色付きの車輪のようになりくるくる回っているような処理の部分で発生します。 iPhoneやiPod touchの場合、表に見えているのは自分の作ったアプリケーションですが、全部の制御がそのアプリケーションに移っている訳ではなく、裏側で常にシステム側から監視をされています。分かりやすいように書くと、自分のアプリケーションがシステム側から呼ばれた時にお
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 iPhoneアプリ開発中に早い段階でアイコンを作っておくと、ホーム画面が白いのっぺらぼうで埋め尽くされる…という心配がなくなります。アイコンを作る時に、同時にiTunes Connectでアップロードする時に必要なアートワークまで作れたら便利かと思い、アイコン製作用の簡易ツールをHTML5(+javascript)で作ってみました。ブラウザでファイルを表示すると、512×512のjpeg画像と57×57のpng画像が表示されます。以下はブラウザに表示させたときのスクリーンショットです。 ブラウザ上から画像を保存することでファイルが得られます。得られた画像は以下のようになります。 ソースはこのような感じになります。 <!doctype html> <html> <head> <me
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 アプリが一回起動した場合、あちらこちらへビューを移動させても、各テーブルの状態は保存されています。タブで他のビューに切り替えた後に元のビューへ戻っても、付けたチェックマークなどはそのまま残っています。ただ、一度アプリを終了し、再度アプリを起動してみるとビューの状態はリセットされています。そのため、もし前回起動した時の状態に戻したい場合には、アプリ終了時点の状態を保存し、ビューを表示する際に保存した状態に復旧する処理を自分で行わなければなりません。今回はその方法のうち、TableCellに関わる部分だけ説明します。まじめに説明するとこれだけでも相当な文量になりますので、他の部分はまた別の機会ということにします。さて、まずは下のコードを見てください。今回も某開発中ソフトのコードをその
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 アップル社公式の開発ガイドなどでは、iPhone OSをターゲットとしたアプリケーションを開発する場合、autoreleaseはなるべく避けるようにと書いてあります。この記事ではその理由を掘り下げてみようと思います。 この理由を明かす前に、まず推奨となっているretain countでの管理と、autoreleaseでの管理の違いを説明します。retain countで管理されているオブジェクトは、それをメモリー上に残しておきたい場合にretain countを0より大きい値になるようにしておきます。そのオブジェクトがallocやretainされるとカウントが増加し、releaseされればカウントが減少します。カウントが0になった状態でrun loop(ユーザーからの入力などのイ
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 これまでは自分のアプリケーションで作ったデータをiPhoneから外へ出そうとすると、様々な困難がありました。標準のメール機能へファイルを受け渡す事が出来なかったからです。画像については標準の写真アプリにファイルを送る事が出来るため、写真アプリへデータを渡し、写真アプリを開いて画像を表示、さらにアクションからメールへ添付することで一応外へ出す事が出来ましたが、それもかなり回り道をしている状態でした。 私も自分のアプリケーションが持つデータを外へ出すために四苦八苦し、自前でSMTPやFTPのクライアント機能を実装してなんとか出口を作ってきました。ですがこれからはそんな苦労をしなくても簡単にメール添付でのデータ送信ができます。それは3.0ではMessageUIが追加されたからです。実際
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 以前の記事『テーブルのセルへの参照を2書類以上混在させる』で数種類のセルを混在させる方法を書きましたが、あの方法には実は大きな欠点がありました。その欠点はテーブルが画面に納まりきる場合には全く問題にならないのですが、テーブルのセル数が多くスクロールさせる必要がある場合に大問題になります。そう、スクロール速度がとても遅くなるのです。 最近Tiny3Dで各基本図形の詳細設定をする画面のテーブルスクロールを少しでも高速にしようといろいろ試行錯誤していてわかったのですが、セルの再利用を行えるかの判定部分の処理はかなり重たいようです。スクロール時には画面に表示するセルが次々変化するため、その度に行われるセル再利用判定がスクロールの邪魔をしてしまっていたのです。 つまり、それらの判定を必要最
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 3.0になったことによる、UITableView関連での変更点はUITableViewCellの変更だけのようです。これまではセルそのものがUILabelのようにtextを持っていたのですが、3.0以降ではセルは2種類のラベルを持ちます。textLabelとdetailTextLabelです。従って、3.0専用にアプリケーションを作る場合には、今までとは少しだけセルへのテキストの渡し方が変わります。これまで「セルの変数名.text」だったのが、「セルの変数名.textLabel.text」や「セルの変数名.detailTextLabel.text」になります。また、セルの作成時の宣言がフレームからスタイルに変更されています。スタイルは4種類の中から選びます。文章で書いていても分か
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 TableViewでpushViewControllerを呼び出してスクロールさせていく場合には、スクロールする前にいろいろとデータを渡してやるのに苦労することはまずありません。なぜならpushViewControllerで次のビューを表示するために使うViewControllerの参照を書いているからです。それをもとに関数を呼ぶなり変数を変更するなり好きにすれば良いのです。ここまでは当たり前な話です。 では、その逆にpopViewControllerで戻る側にデータを渡したい場合はどうでしょう。代表クラスに全部データを持たせておき、そちらを通じてやりとりする手もあります。渡したいデータは代表クラスに渡しておき、戻り先のViewControllerにあるViewWillAppea
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 多数のビューをもつプログラムでは設定データの管理は代表クラスで一元管理したほうが解りやすいです。なぜならアプリケーション起動直後にデータの読み込みを行うのも、アプリケーション終了時にデータを保存するのもプロジェクトの〜AppDelegateクラスで行うのが基本的なお作法だからです。そのため代表クラスに設定値変更用の命令を用意しておき、ビュー側でデータを変更したらそれを呼び出して代表クラス側の値を逐次変更してゆきます。では、ビューから代表クラスのポインタを取得するにはどうするかというと、UIApplicationクラスにある命令を使います。 Tiny3DAppDelegate *appDelegate = (Tiny3DAppDelegate *)[[UIApplication s
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 iOS5や6になって画面の表示前に出されるメッセージ(一般的な言い方をすると関数でしょうか)群にかなり変更があり、昔のプロジェクトのままだとなんだか画面のレイアウトがおかしいぞということになりやすいです。とりあえず自分の経験でこうすれば良いのではないかという対処法について書いてゆきます。 まず、画面を表示させたときにレイアウトに問題がある場合には、その問題のあるパーツを管理するViewControllerのメソッドファイル内で、viewWillAppear:の中で初期化するようにしておくと良いです。現在ない状態なら作っておきましょう。画面の回転状態でレイアウトを変更する必要がある場合には、現在の画面の回転状態を[[UIApplication sharedApplication]s
以前の記事『テーブルのセルへの参照を2書類以上混在させる』で数種類のセルを混在させる方法を書きましたが、あの方法には実は大きな欠点がありました。その欠点はテーブルが画面に納まりきる場合には全く問題にならないのですが、テーブルのセル数が多くスクロールさせる必要がある場合に大問題になります。そう、スクロール速度がとても遅くなるのです。 最近Tiny3Dで各基本図形の詳細設定をする画面のテーブルスクロールを少しでも高速にしようといろいろ試行錯誤していてわかったのですが、セルの再利用を行えるかの判定部分の処理はかなり重たいようです。スクロール時には画面に表示するセルが次々変化するため、その度に行われるセル再利用判定がスクロールの邪魔をしてしまっていたのです。 つまり、それらの判定を必要最小限に行うようにした方がテーブルのスクロールを高速に出来ます。そのためには、たとえ複数回の重複部分が発生してコー
文字列を整数に変換する場合には、NSStringクラスのintValueを使います。 NSString *str = @"123"; NSInteger i = [str intValue]; とある場合には、iの値は123となります。 逆に整数値を文字列に変換する場合には、NSStringクラスのstringWithFormatを使います。 NSInteger i = 123; NSString *str = [NSString stringWithFormat:@"%d", i]; とある場合には、 NSString *str = @"123"; と同じ結果になります。
以前にSQL文がそのまま検索に使用できる時の流れは書いていますが、検索条件をプログラム内で変更したい場合も当然出てきます。その場合の方法です。説明のため、またKigenの一部ソースを引っ張ってきて手を加えています。 NSInteger level1 = 1; sqlite3_stmt *st; const char *sql2 = "SELECT pk FROM kigen WHERE level1=?"; if (sqlite3_prepare_v2(database, sql2, -1, &st, NULL) == SQLITE_OK) {
このページを最初にブックマークしてみませんか?
『混沌のiPhone開発ブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く