iPhone iPad iPod touch」カテゴリーアーカイブ

iPhone iPad iPod touch

iOS Settings

iOS の設定画面は、Settings.bundle の Root.plist で簡単に作成できます。
ただしデフォルト値を設定しても、アプリのインストール直後には UserDefaults に
反映されていません。

一度でも設定画面を開かないと初期値が反映されないことはわかったのですが、
iPad と iPhone で値が異なる問題で悩んでいました。
原因は iPhone の方画面が狭いからでした。

iPad では設定項目が全部画面内に収まっているので、設定を開くと全部表示されます。
iPhone だといくつか画面外に出ており、スクロールさせないと表示されない項目がありました。
画面外のもの、つまり一度も表示されていない項目には初期値が入らないようです。

iOS CADisplayLink とフレームレート

DisplayLink の描画呼び出しは基本的に 1/60 sec 単位で行われます。

わかりやすく言えば WaitVSync です。
処理が落ちが発生した場合も、次の VSync 相当のタイミングを待ってから
呼び出しが行われています。

そのため問題となっていたのが frameInterval を 2に設定した場合で、
当初この API で呼ばれるタイミングを勘違いしていました。

        (A)     (B)     (C)     (D)
--------------------------------------------
frame 0 draw    draw    draw    draw
frame 1
frame 2 draw
frame 3         draw    draw
frame 4 draw            draw    draw
frame 5         draw
frame 6 draw            darw    darw

(A) = 処理落ちなし
(B) = 処理落ちした場合の実際の動作
(C)/(D) = これは間違い

基本的に 2 frame に一度呼ばれますが、処理落ちが発生した場合は
次の VSync 相当のタイミングで呼ばれます。
上の (B) の動作となり、(C) や (D) にはならないようです。

Xcode 4.4 と Objective-C property

知人がはまっていたバグ。

@interface MyClass : NSObject {
  MyObj* p;
}
@property (retain) MyObj* p;
@end

@implementation MyClass
@synthesize p;
-(void)setp
{
   p= value;  // ← ここ

   ~
   self.p= nil;
}
@end

ようするに Property と思って代入したのに “self.” が足りなかった
ため retain されていませんでした。

1. p= value;
2. self->p= value;
3. self.p= value;

どれもコンパイルが通りますが上の 2つはメンバへの直接アクセスで、
3. だけ property のメソッドが呼ばれます。

Xcode 4.4 以降はメンバの宣言も @synthesize も書かなくて良くなっています。
簡単に書けますし、この時デフォルトで挿入される変数も “_p” となるため、
上の 1. 2. のようなミスもエラーで分かります。

// Xcode 4.4 以降

@interface MyClass : NSObject
@property (retain) MyObj* p;
@end

@implementation MyClass
-(void)setp
{
  self.p= value;
  ~
}
@end

次からは絶対 ARC にするともいってました。

iPod nano 6G

iPod nano 6G 買いました。
目的は音楽プレイヤーというよりも身に付けられる小さなデジタルフォトフレーム
といったところ。なにせ正方形な形といい黒枠といい、どうみても AR マーカーに
してくださいといってるようなもの。

nano6g04.jpg

表面はほとんど液晶画面だし、好きなデジタルデータを入れられて身に付けられる
大きさです。容量もたっぷりあるのでさまざまな使い道が考えられそうです。

液晶画面は 1.54インチで 240×240 ドット。
計算するとおよそ 220ppi。解像度も十分高く綺麗に見えます。

アプリケーションの追加はできませんがホーム画面のカスタマイズは可能。
アイコンを動かしてホーム画面を増やすことが出来ます。

アイコンは 14個しかないのに何故か 10ページまで作れる。

nano6g01.jpg

フォトビューア(写真)の他にも FM ラジオ、アナログ時計、万歩計付き。
Nike+iPod のレシーバーをつけたらメニューが増えました。

nano6g03.jpg

アナログ時計も通常の画面も 1分半くらいすると画面が消えます。
スリープ時間の設定が無いのが残念。

スライドショー画面だけはスリープ回避できそうです。
フォルダを分けてリピートに設定しておけば大丈夫でした。
同じ画像を表示し続けることができます。

設定
・次のスライド: 20秒
・リピート: オン
・トランジション: ディゾルブ

バッテリーが 1/4 くらい減ったあたりで、画面の輝度最低のまま放置。
だいたい 2時間半くらい持つようです。

スリープともう一つ、操作のロックが出来ないのも問題です。
静電容量型タッチパネルなので、触れないくらい厚みがあるアクリル板で覆えば
大丈夫かもしれません。購入時のケースの蓋がちょうど良い厚みでした。

iPhone クラスとまでは言わないので、このサイズでも何らかのアプリケーション開発が
できるようになるといいですね。
10ページ × アイコン 4つ。
40個のアプリで埋まったホーム画面を見てみたいものです。

iPad タッチキーボード

iPad のタッチパネルは紙を数枚重ねても反応します。
指が直に触れる必要はないようです。
薄い紙を1枚敷いて適当に下書きして、上に切り取った厚めのボール紙を貼りつけてみました。
キーの形にカットして中央に穴をあけています。
うまくいくかわからなかったので、かなり適当な試作です。

ipad_keytest1.jpg

厚紙でも 2枚くらいなら反応するので、キーの上に指を置いて休めることはできません。
ただタッチしたときにボタンの位置がわかるので、ホームポジションからタッチ
しながら位置の補正ができるようにはなりました。
見た目は悪いけど意外に打てるかも。

キータイプしてて違和感あるのは次の3つ

 (1) 爪があたっても反応しない。
 (2) ソフトキーボードのキー間隔が微妙に一定じゃない。
 (3) 長押し判定があり、キーを離したときに入力される。

(2) はタイプするまで気が付きませんでしたが、一見等間隔に並んでいるようで違います。
例えば左端の [Q] と [A] はキー幅の半分ずれてますが、右端の [O] と [L] は
キー幅の半分以上重なっています。[O] と [L] の方が本来のキーに近い配置です。

同じように [A] と [Z] のずれ位置は正しいですが、右端の [L] に対して [.] は若干
左に寄っています。

ちょっとくらい貼り付ける位置をずらしても大丈夫なので、本来のキーボードに合わせて
作れば打ちやすくなるかもしれません。

(1) はタイピング方法を変えて慣れるしかなさそうです。中指の中下段など、キーに
よっては少々厳しいところがあります。

意外に良かった点は Nキーロールオーバー。押しっぱなしでも 7キーくらい順番通りに
入力されました。多点マルチタッチ可能な iPad ならでは。

ただ (3) の挙動があるので、複数のキーを押したままだとどれか 1つのキーを離すまで
文字が入力されません。

その他のテスト

裏返しで使ってみたら、触れただけでは反応せず押し込んで打てるようになった。

もっと手抜きして、キーの中央に小さく紙を貼りつけるだけでも打てます。
位置が分かりづらいので最初のと比べていまいちでした。

ipad_keytest4.jpg

入力よりも連文節の変換で詰まることも多いです。
iPhone は iOS 4 で改善されているので iPad 版を待つことにしましょう。