Hatena::Groupiphone-dev

iOS プログラミングメモ

2008-12-28 (Sun)

ランキング動き出した 09:52  ランキング動き出した - iOS プログラミングメモ を含むブックマーク

AppStore が動き始めた

iTunes Connect 17:47  iTunes Connect - iOS プログラミングメモ を含むブックマーク

ログイン出来るようになってます。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081228

2008-12-27 (Sat)

AppStore のランキング 12:20  AppStore のランキング - iOS プログラミングメモ を含むブックマーク

全く動いてないね。自動じゃぁなくて、人の手が絡んでるんだろうか…。

冬期休暇が終わるまでは再開しないっぽいな。

28日に再開予定って事で、US西部時間で28日の00時が日本時間だと28日の17時だから、おお、明日には再開するのか。お、もしかしたら今年中に明朝対応版リリースされるかも。期待。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081227

2008-12-26 (Fri)

カスタムフォントの組み込み 12:24  カスタムフォントの組み込み - iOS プログラミングメモ を含むブックマーク

SkyBook の情報を追っかけている人はご存知でしょうが、明朝フォントの組み込みが出来ました。なぜか日本語で解説したサンプルがなくて四苦八苦しましたが、なんとか実現する事が出来ました。以下やり方を書いておきますので、他の青空文庫ビューワでも早晩対応されるでしょう。逆に言うと、対応されない青空文庫ビューワには将来はないと断言しておきます。

まずプロジェクトに適当なフォントファイルを追加します。例えば、IPA 明朝フォントの ipam.ttf を追加したとして話を進めます。

そんでもってコードのサンプルです。以下のコードは UIView を継承したクラスに書く事になると思います。とりあえずの動作チェックとして、drawRect の中に書けば良いでしょう。

// [フォントデータの読み込み]
// bundle ディレクトリがデータを読み込みます
NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"ipam" ofType:@"ttf"];
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);
CGFontRef _cgFont = CGFontCreateWithDataProvider(fontDataProvider);
CGDataProviderRelease(fontDataProvider);
// この時点で、メモリ使用量が7メガほどになります。
// 複数のカスタムフォントを読み込むと多分死にます。

// [フォントの指定]
// View の context に対してフォントの設定を行ないます。
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFont(context, _cgFont);
CGContextSetFontSize(context, 20);

// [回転]
// iPhone の座標系と Core Graphics の描画処理に相違があって
// そのまま描画をすると反転してしまうので、CGContextSetTextMatrix で反転させています。
// → 参考: http://idlysphere.blog66.fc2.com/blog-entry-153.html
CGAffineTransform transform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextSetTextMatrix(context, transform);

// [テキストの描画]
// テキストを unicode 文字列に分解してさらにグリフコードを取得します。
// グリフコードは各フォント毎に異なるので、その変換です。
// 最後に、指定したポジションに文字列を描画しています。
NSString *str = @"テスト文字列だよ";
CGGlyph _glyphs[[str length]];
unichar _chars[[str length]];
int i;
for(i = 0; i < [str length]; i++) {
   _chars[i] = [str characterAtIndex:i];
}
CGFontGetGlyphsForUnichars(_cgFont, _chars, _glyphs, [str length]);
CGContextShowGlyphsAtPoint(context, 0, 20, _glyphs, [str length]);

// [フォントデータの開放]
// これを忘れるともの凄いメモリリークになるので注意!
CGFontRelease(_cgFont);

// 以上で終わり

実は CGFontGetGlyphsForUnichars はヘッダファイルにも書いてない undocumented な関数なので、このままやると warning が出ます。適当なヘッダファイルとかに以下のコードを入れておけば warning は出なくなります。

bool CGFontGetGlyphsForUnichars(CGFontRef, unichar[], CGGlyph[], size_t);

文字の色に関しては、CGContextSetFillColorWithColor とか使って出来ない事もないですが、普通に UIColor を使った方が簡単だと思いますしおすすめです。

本当は、商業的な理由により SkyBook の新バージョンがストアに並んでから書こうと思ってたんですが、ネイティブアプリスレ で試行錯誤中のようなので、もう書く事にしました。規制中なのであっちに書き込む事が出来なくて歯がゆいわけですが。●買えば規制中でも書き込み出来んの?

クラス化のすすめ

コードのコメントにも書いてありますが、iPhone 的に見てメモリ圧迫量がいささか大きいです。しかもフォントの読み込みの部分は若干重い処理になるので、CGFontRef の生成は別のクラスに任せておいて、View にそのオブジェクトを渡してフォントのオブジェクトはコントローラで扱うって言うのがオブジェクト指向的にも良いんじゃないでしょうか。

例えば、こんなん。

// SomeViewController
CustomFont *custom = [[CustomFont alloc] init];
[[SomeView alloc] initWithFont:custom]

この辺のサンプルプロジェクトは、多分誰かが作る。

米国に挑む人 18:42  米国に挑む人 - iOS プログラミングメモ を含むブックマーク

こんな集まりがあったなんて全然耳に入ってこなかったなー。iPhone Developer Japan か。入ってみようかと思ったけど、クローズドなのはちょっと…。

ohnoohno2008/12/30 04:21どうもohnoです。
その節はありがとうございました〜。

既にご存知でしたらすいません、長音記号の横から縦への変換についてです。
「ー」を縦にしたい場合、横のグリフコード660を7891に変換すれば縦書きになります。
ただ、あくまでもフォントに縦書き長音記号がある場合となります。

Adobe-Japan1-6に対応しているフォントならOKかと。
http://www.adobe.com/devnet/font/pdfs/5078.Adobe-Japan1-6.pdf

失礼いたしましたー。

ktakayamaktakayama2008/12/31 23:15ありがとうございます。
これで縦書き用の文字使えそうです。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081226

2008-12-24 (Wed)

iTunes Connect is closed for the holidays. 15:30  iTunes Connect is closed for the holidays. - iOS プログラミングメモ を含むブックマーク

Please come back when we reopen on December 28th

だって。

仕方ないっすねえ。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081224

2008-12-23 (Tue)

辞書アプリとの連携 22:53  辞書アプリとの連携 - iOS プログラミングメモ を含むブックマーク

そう言えば青空文庫アプリと辞書アプリとの連携ですけど、以前物書堂さんに打診してみましたが断られました。アプリの起動に時間がかかる現状なので、ユーザビリティが低くなるという理由でした。それが この時の思いつき なんですけどね。

goo 辞書でも起動すっかな。その前にやる事がいっぱいありますけど。

タイミングが悪い事に、まもなくクリスマス休暇のようなので、次の更新のお届けが来週になっちゃうかもしれないんですよね…。今日アップデートの申請したのですけど、そいつがどうなるか。

追記

早ければ大丈夫ってことなんですかね。

http://www.appbank.net/2008/12/24/iphone-application/5134.php

大事な事を書いてませんでしたというか、自分的にはこっちの理由はどうでも良かったのでスッポリ抜け落ちてましたけど、上で書いた以外のメインの理由がありました。

曰く、歴史的仮名遣いでの検索が必要になったり、活用した単語を原型に戻したりと言った事が必要になるなど、現状での連携は厳しいのではないか、という事でした。

まあ、確かに、調べようと思って数秒待って辞書を起動したら「見付かりませんでした」とか、なんだよそれってなっちゃいますよね。

fladdictfladdict2008/12/24 08:39青空文庫に辞書いいですね。
UI的に文字の上でホールドしたら、インジケーターがでて通信、ポップアップで意味が表示されるとかだと使いやすいんじゃないでしょうか。
通信中にホールドをキャンセルできれば、辞書を起動するより負担は圧倒的に低いですし。

ktakayamaktakayama2008/12/24 11:00> fladdict さん
そんな感じに、大辞林っぽいインターフェイスが非常に使いやすいと思います。
手軽に確認出来ると、本当に便利になりそうで、思いついた時はもの凄く興奮しました笑。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081223

2008-12-21 (Sun)

iTunes Connect unavailable from December 24-December 27 17:21  iTunes Connect unavailable from December 24-December 27 - iOS プログラミングメモ を含むブックマーク

24日から27日までの間、iTunes Connect が使えないそうです。

Program Portal にログインすると表示されます。

クリスマス休暇?

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081221

2008-12-18 (Thu)

iPhone/iPod touch プログラミングセミナー 16:05  iPhone/iPod touch プログラミングセミナー - iOS プログラミングメモ を含むブックマーク

明日ある例のあれ。

第二回の方へ参加する予定です。

あほググル 19:11  あほググル - iOS プログラミングメモ を含むブックマーク

iPhone/iPod touch プログラミングセミナー」でググると何故かこのページがヒットすると言う不思議。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081218

2008-12-17 (Wed)

23:46  む - iOS プログラミングメモ を含むブックマーク

ちょっと分かってきたかも…しれない。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081217

2008-12-16 (Tue)

i文庫 01:45  i文庫 - iOS プログラミングメモ を含むブックマーク

ってイイな。

てか、明朝対応アプリがいくつか出てるけど、そんな簡単に出来るもんなのか…。僕はフォントの組み込み方法がわかんないので、無理です。誰か教えてください><。

ohnoohno2008/12/18 00:50個人的にアプリ作成、配信しておりまして参考にさせていただいております。
僕もフォント組み込みに挑戦してるんですがさっぱりでして、
OSXに入ってるotfファイルを入れてみようと挑戦中です。
解決できたら是非ポストしてくださいませ。僕もわかったらご連絡いたします!

ktakayamaktakayama2008/12/18 06:52ええ、なんか難しいですよね…。
もちろん、出来あがったらココに書きますよ〜。
ohno さんからの情報も期待してます!

ohnoohno2008/12/18 11:48色々調べたんですが、フォントをプロジェクトに追加して、
plistにATSApplicationFontsPathを設定するといけるぜ!
な情報があったんですが、パスの表記が間違ってるのか上手くいかずTT
これでいけそうだと思うんですが・・・

ktakayamaktakayama2008/12/18 13:15おお、と思って感動しましたがうまくいかないですね。
Runtime Configuration Guidelines (
http://developer.apple.com/iphone/library/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html#//apple_ref/doc/uid/20001431 ) を見る感じだと、platform が MacOSX しか書いてないから対応してないっぽいですね。

ohnoohno2008/12/18 13:56無駄な情報すいませんでした!
OSXだけみたいですね・・・
下記にややこしい方法が載ってましたがグリフとかややこしいです。
こんな複雑なんですかね・・・うう。
http://stackoverflow.com/questions/360751/can-i-embed-a-custom-font-in-an-iphone-application

ktakayamaktakayama2008/12/18 16:06やはり、この辺の低レベルな技が必要になってるようですね。
ちょっと大変ですけど、やった方が良いよな…。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081216

2008-12-09 (Tue)

SkyBook 1.1.1 09:48  SkyBook 1.1.1 - iOS プログラミングメモ を含むブックマーク

好きなページに移動出来る機能がつきました。あとはほとんど変わってないっす。

SQLite 09:52  SQLite - iOS プログラミングメモ を含むブックマーク

ふと思いついたんだけど、JB してて SQLite の知識があってウェブサーバについてそこそこ詳しければ、現状でも SkyBook に独自テキストのインストールが出来ます。

アプリケーションの Documents ディレクトリからデータベースファイルを取り出して、authors テーブルに著者情報を登録して books テーブルに作品の情報を登録するわけなんですが、その時に path カラムに http から始まる URL を入れると、アプリからダウンロード出来るようになります。さすがに面倒くさいと思うし、この説明で何がなんだかわからない人にはちょっと難しいですね…。

SkyBook でのローカルテキストのインストール機能は、来週か再来週くらいになりそうです。

がんまがんま2008/12/13 17:27独自テキストを取り込む方法ってiVBookみたいに、各自
/var/mobile/Media/Photos/EBooks
に入れてください、って言う方法は取れないんですかね?
基本的にはアプリケーションからは、他のディレクトリは
見られないんでしょうか?

ktakayamaktakayama2008/12/14 00:58はい、アプリから見れるディレクトリにかなり制限があるので、そういう方法を取るしかないのです。
審査がどうなるかわかりませんが、SkyBook も iVBook の方式でいく予定です。

macchkymacchky2009/12/14 17:16windowsのソフトなんですが
SQLiteのdbの編集に"PupSQLite"というソフトが
つかいやすいですよ:-)

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081209

2008-12-08 (Mon)

思いつき 15:03  思いつき - iOS プログラミングメモ を含むブックマーク

やばい、ちょっとおもしろい事を思いついてしまったかも。これが実現すれば結構便利になるし、なにより話題になりそうだ。まだ秘密。ふっふふ。

ダメだった

提案元に断られてしまった。仕方ないので、別解を考える。

審査って、何日かかけて行なってるのかな 16:49  審査って、何日かかけて行なってるのかな - iOS プログラミングメモ を含むブックマーク

審査してる人とメールのやり取りがあったので記録しておく。[2] の時点で既にアプリの中身をチェックしていたので、すぐ通るかと思ったけど、何だかんだで今日まで進展がない。

以下日本時間

  1. 12-05 多分17時くらい - バージョン 1.1.1 アップロード
  2. 12-06 09:1X - 審査員より質問のメールが届く
  3. 12-06 09:2X - 返事を出す、ついでに質問
  4. 12-07 02:5X - 質問の回答が届く
  5. 12-08 16:4X - 進展なし

このバージョンの新機能 / What's New In This Version 16:59  このバージョンの新機能 / What's New In This Version - iOS プログラミングメモ を含むブックマーク

新バージョンをアップロードする際に「What's New In This Version」の部分にアップデートの内容を入力しますよね。この欄に、過去のアップデートの内容を列挙してるアプリとか、たまにあるじゃないですか?

そんな感じで、SkyBook でも過去のアップデートの内容を入れといたわけですよ。そうしたら devprogram の人からメールがきまして「ここに書いてあるコレなんだけど、どうやって設定したらいいの?項目なくね?」と来たんですわ。いや、それ、昔の変更なんで今回は関係ないんですよ…。見た目をちょっと変えただけで、設定とかじゃないです…。と返事をするついでに「What's New In This Version」に過去のバージョンの変更内容を記述してもいいのか質問してみました。その回答は「該当のバージョンについての内容を記述してもらった方がわかりやすいけど、過去の分を載せてはいけないと言うルールは無い」と言う事でした。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081208

2008-12-06 (Sat)

祝 SkyBook ベスト10入り 13:57  祝 SkyBook ベスト10入り - iOS プログラミングメモ を含むブックマーク

ありがとうございます。本当ありがとうございます。

f:id:ktakayama:20081206140714j:image:w400

メモリ問題 22:23  メモリ問題 - iOS プログラミングメモ を含むブックマーク

「我輩は猫である」のサイズが1MBちょっとの作品でして、これが動くのを基準に作ってたんだけど、海島冒険奇譚 海底軍艦 なんていう2MBオーバの作品がある事をレビューで知りました。調べてみたら、1.5MBを超えてる作品が5個ほどありまして、そのうちの2MB以下の3作品は処理出来たんですけど、残り二つはクラッシュするところか端末が再起動すると言う何とも悲しい結末に…。

前に書きましたが、「我輩は猫である」のダウンロード時に使用するメモリ量は30MB近くになるので、明らかにメモリ不足が原因です。というわけで、どうにかメモリを無駄使いしないやり方を考えていたのですが、意外とあっさり解決出来ました。

詳しくは以下参照の自動開放プールをホゲるやり方でいきました。

この方法に行き着く前は、処理を細かく分離しようかと思ったのですが、それって結構面倒くさいしバグ出ちゃう可能性もあるしで悩んでいました。そんなこんなで考えていたら、上記の自動開放プールの話を思い出したので、さくっとループの中に入れて試してみました。すると劇的にメモリ使用量が減るじゃないですか。試しに「我輩は猫である」でチェックしてみると、マックス6MB程度のメモリしか使用しないで済みました。

それでまあ、一つだけ問題があって、[pool release] が重いんですわ。ループの中で毎回やると、とってもパフォーマンスに影響するわけです。なので、これをやる場合はループの中でも数回に分けて実行するようにした方が良いかと思われます。

私はこんな風にやってますが、十分な効果を得る事が出来ています。

NSAutoreleasePool *lpool;
int i = 0;
while(obj = [enu nextObject]) {
   if(i % 500 == 0) lpool = [[NSAutoreleasePool alloc] init];

   // hogehogehogehoge

   if(i % 500 == 0) [lpool release];
}

もちろん回数は適当に調整してくれればいいかと。

お陰で「海島冒険奇譚 海底軍艦」もダウンロード出来るようになりました。

ART2ART22008/12/06 21:20おめでとうございます。
VerUPするたびにスピードアップしているような。
すごいですね。
ところで、「書籍データベースの更新機能」が新しく追加されたとありますが、どんな機能ですか?
内部処理の変更?

ktakayamaktakayama2008/12/06 22:29どうもです。
視覚効果とか入れたりして、体感速度の向上も図ったりしてます。
データベースの更新機能はですね、Downloads タブを開くと「作家一覧」と書いてある左側に矢印マークが出ているのですが、これです。こいつをタップすると、ローカルの書籍データベースを最新のものに更新してくれます。青空文庫では、毎日のように新作が公開されているので、それに追従するための機能です。いまはわかりにくい状態ですが、いずれ「最新の作品」という一覧画面を追加して、新しい作品を見れるようにしようと考えています。

typhoon_516typhoon_5162008/12/07 23:16ダウンロードさせていただきました。
まさかこんなアプリがあったとは…読書好きにはたまらないアプリです!
フォントサイズや行間がカスタマイズできるので、
自分の読みやすい表示にできるのがとても良いですね。
あと、作家一覧画面で右側に五十音が表示されていて、
タッチするとその瞬時にその音に移動するのが何気に便利です。


ただ少し改善して欲しいところも…
まず、スクロールで徐々にページを進めていけるようにしていただきたいです。
今はスクロール中に指を離すと瞬時に元に戻るか次ページに行く状態ですが、
指を離した位置でそのまま止められるようにしていただきたいのです。
普通のアプリだと「キビキビ軽快に動く」のが良いのかもしれませんが、
読書は文の流れが大事なので急にパッと動かれると読んでいる部分がわからなくなって
流れが止まってしまうんですよね…
できればSafariのように自分の好きな位置にスクロールできるような設定追加をお願いします m(_ _)m

ktakayamaktakayama2008/12/08 15:00ご購入ありがとうございます!

スクロールのお話は、iVBook がそんな感じの動きですね。
確かにその方がいい場合もあるのでしょうが、コアな部分なのでなかなか変更しにくいです。
他にも似たような要望は頂いているので、じっくり考えておきます。

通りすがり通りすがり2008/12/12 14:05プールのアロケートと解放はループの外にして、
ループ内でのメモリ解放は drain でやった方が
スマートだと思います。

ktakayamaktakayama2008/12/14 01:02なるほど、ということは…
プール作成
ループ& drain
プールrelease
って感じでしょうか?
確かにこっちの方がエレガントですね。ありがとうございます。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081206

2008-12-05 (Fri)

SkyBook 1.0.2 11:51  SkyBook 1.0.2 - iOS プログラミングメモ を含むブックマーク

バグフィックスやルビ表示に対応したバージョン1.0.2がリリースされました。はずなんですが、ストアにまだ反映されていません。もうちょっとお待ちください。

本当はこのリリースはバージョン1.1.0なんですが、アップルのシステム上の制約から1.0.2を名乗っています。どうでもいいトリビアですね。具体的に言うと、一旦申請をキャンセルした場合、再申請する時は前に申請した時のバージョン番号が使われてしまうんですよね。困ったもんです。

ON SALE の件 11:53  ON SALE の件 - iOS プログラミングメモ を含むブックマーク

iTunes Connect 上で 512x512 の画像を更新した所、思惑通りストア上の表示も更新されました。セールをしたい人は、この画像を変えればOKのようです。

BB2C 01:23  BB2C - iOS プログラミングメモ を含むブックマーク

なんかこのアプリの動きの速さに大騒ぎのようですけど、これ、普通に UITableView でしょ? 別に重そうな部分も見当たらないし、こんなもんだと思うんだけど…。いや、確かに高速スクロールだけどさ。開発者がそんなに驚く場面じゃないでしょ。SkyBook では8000件の全作品リストを表示するのに SQLite の select 文を発行しながら描画してるけど、スクロールに引っ掛かりは出ないし、許容範囲内の出来事だと思うんだけどなぁ。なんか勘違いしてるのかしら。

……うーむ、やっぱり自分の勘違いっぽいのかな。明日辺りに誰か偉い人が解析結果を発表してくれるかもしれないので、凡人の僕はそれを見て勉強する事にしよう。

データベース

軽く見てみたけど、データベースは使ってないっぽいっすね。dat を直接パースしてるように見える。

この事を言ってるのか

何の速さに驚いてるのかわかった。TableView の各セルの高さを求める計算だ。セルの中身は画面上に表示してる部分だけをレンダリングすればいいけど、高さだけは最初に確保しないといけないんですよね。一つ一つのセルの高さが可変だと、最初に全部計算しなくちゃいけないから、それが時間がかかると。BB2C はその計算に時間がかかってる感じが見られないからビックリだなと。確かにそういう観点で見るとずいぶんと高速に感じるし、とても UITableView を使ってるようには見えない。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081205

2008-12-04 (Thu)

AppStore に並んでるアプリの画像 12:23  AppStore に並んでるアプリの画像 - iOS プログラミングメモ を含むブックマーク

「ON SALE」とか付いてるのあるけど、512x512 の画像をアップロードしてる感じなのかな?ちょっと試してみるか。

バグ修正の提供が遅れるってのは歯がゆいわ〜 15:22  バグ修正の提供が遅れるってのは歯がゆいわ〜 - iOS プログラミングメモ を含むブックマーク

やっぱ、minor bug fix とだけ書いてアップする作戦がいいんだろうか。

ルビ対応 19:25  ルビ対応 - iOS プログラミングメモ を含むブックマーク

Appbank さんが大興奮でレビューしてくれています。どうもありがとうございました!

おかげさまでストア内のレビューに関しても良い評価を頂いており、特に自分が日頃から気にかけているサクサク感が好評なのは嬉しいです。

さて、Appbank さんのレビューを見てもらうとわかりますが、実はルビ表示バージョンは完成してて普通に使えます。もちろん動作はサクサクのままです。ここまで来たら言っちゃいますが、現在申請中のバージョンからすでにルビに対応しているのですよ、ふっふっふ。

いや〜、やっぱルビがある事による読みやすさは今までの非になんないですよ。楽しみにしていてください!

SkyBook のビデオ 19:42  SkyBook のビデオ - iOS プログラミングメモ を含むブックマーク

操作感の参考になるかなーと思ってビデオで撮ってみたんだけど、暗すぎてダメだな…。ビデオ初心者にはツラいっす。

SteadyCamera 21:35  SteadyCamera - iOS プログラミングメモ を含むブックマーク

このアプリ、サードパーティ製のカメラアプリ、つまり UIImagePickerController を使ってお作法通りに作ったモノとは違って、シャッターボタンを押したらそのまま保存されるっていう、いわゆる iPhone に付属の「カメラ」アプリと同じ動きをするんだけど、これ審査通るんだ。なるほどね。ToyCamera とかこっちの方式がいいよね。

イケないメンイケないメン2008/12/05 06:09暗いことは気になりませんでした。
画面にライトの写り込みさえなければ全く問題ないと想います。

ktakayamaktakayama2008/12/05 11:54あ、ライト気になりますよね。
もうちょっと綺麗に撮りたいです。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081204

2008-12-03 (Wed)

AppBank さんのレビューのやつ 19:26  AppBank さんのレビューのやつ - iOS プログラミングメモ を含むブックマーク

iPhone / iPod Touch アプリケーションの記事掲載、レビュー依頼について | AppBank – iPhone, スマホのたのしみを見つけよう のフォームから投稿したんですけど、Submit ボタン押すと内容が消えちゃってうまく送れないんだよなぁ。こまった。

mixi 19:55  mixi - iOS プログラミングメモ を含むブックマーク

のアプリ、決定版が出ないけど何か理由があるのかなぁ。さすがに今から作ろうとは思わないけど、有料でも結構売れると思うんだよなー。

遅延型 UISlider 20:37  遅延型 UISlider - iOS プログラミングメモ を含むブックマーク

UISlider の実装をする時って、例えばこんな風になるわですよね。スライドすると、action で指定したメソッドが実行されると。

@implementation NantokaView
- (id) initWithFrame:(CGRect)rect {
   if(self = [super initWithFrame:rect]) {
      slider = [[UISlider alloc] initWithFrame:CGRectMake(0,60,300,20)];
      [slider addTarget:self action:@selector(updateSlider:)
            forControlEvents:UIControlEventValueChanged];
      [self addSubview:slider];
   }
}

- (void) updateSlider:(UISlider *)aSlider {
   int number = round(aSlider.value);
   // hogehoge
}
@end

スライダーを左端から右端に移動した場合、どんなに素早く動かしても、updateSlider が何度か呼ばれます。このため、hogehoge の処理が重たかった場合、スライダーがカクカク動く上に指の動きとシンクロしなくて使い勝手が低下します。というか、スライダーの移動がひどく鈍重に感じます。

そもそも hogehoge に重たい処理は入れんなよって話ですけど、例えば SkyBook のページ切り替え処理を updateSlider の度に行なうと、大変レスポンスが悪く感じます。実際には0.01秒以下の処理なんですけど、画面描画に関わる処理なので影響が大きいんでしょうね。iVBook のように、スライダーを移動させた後に「OK」ボタンを押すって言うインターフェイスも有りだとは思いますが、タッチ回数もボタン類もあまり増やしたくないし。あとは、UISlider のプロパティで continuous を NO にすれば、スライダーから指を離すまでイベントは発生しなくなるんで、場合によってはそれも良いかもしれないですね。

というわけで、素早くスライドした場合に限って hogehoge の処理をスキップするやり方を考えてみました。

@interface NantokaView : UIView {
   UISlider *slider;
   NSTimer *interval;
   int lastNumber;
}

// 宣言やっといてね
@end

@implementation NantokaView
- (id) initWithFrame:(CGRect)rect {
   if(self = [super initWithFrame:rect]) {
      slider = [[UISlider alloc] initWithFrame:CGRectMake(0,60,300,20)];
      [slider addTarget:self action:@selector(updateSlider:)
         forControlEvents:UIControlEventValueChanged];
      [self addSubview:slider];
   }
}

- (void) updateSlider:(UISlider *)aSlider {
   int number = round(aSlider.value);
   if(lastNumber == number) return;
   lastNumber = number;

   if(interval) {
      [interval invalidate];
      [interval release];
   }

   interval = [[NSTimer scheduledTimerWithTimeInterval:0.05
               target:self selector:@selector(updateSliderFromTimer)
               userInfo:nil repeats:NO] retain];
}

- (void) updateSliderFromTimer {
   // hogehoge
}

- (void) dealloc {
   [slider release];
   [interval release];
   [super dealloc];
}
@end

次期バージョン 22:48  次期バージョン - iOS プログラミングメモ を含むブックマーク

そろそろくると思うんだけど、こんだけ時間かかってリジェクトだったら泣けるな。

appbankappbank2008/12/03 19:30RSSから飛んできますよ!
appbankmail at gmail.com
まで宜しくお願いいたします。

ちょっと今立て込んでいますが、週末までにはレビューは致します!!!

appbankappbank2008/12/03 19:36もう一点、
お問い合わせの受理も午前中に受けていることを確認しました。
ご心配せずにお待ちください。

ただid:katayama氏の前にいくつかレビュー依頼が滑り込んでいるのを確認してしまっているのでもしかしたらレビューはもう少し後になるかもしれません。いつも陰ながら応援していた貴ブログというのもあり、レビューの約束は確実にしますので気長にお待ちいただければと思います!!

ktakayamaktakayama2008/12/03 19:49ありがとうございますありがとうございます><
そんな風に言って頂けるなんて光栄です。
ちゃんと届いてる事がわかったので安心しました。
順番待ちは気になりませんから、ゆっくりしてもらって平気です。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081203

2008-12-01 (Mon)

iVbook 08:12  iVbook - iOS プログラミングメモ を含むブックマーク

脅威と思ってた iVbook が Aozora と同じ形式で出してきた…!!! こっちはラッキーだけど、そりゃないよって感じだろうなぁ。

ていうか、加速度によるページ切り替えが実装されてるっぽいし。むー、やろうと思ってたんだけど、今から追加するとなるとパクリっぽく見えてやだなあ。

こっちとしては 08:14  こっちとしては - iOS プログラミングメモ を含むブックマーク

あの機能は出来たから、あとはさっさとローカルファイルの読み込みかなあ。来週からしばらくいじれないので、それまでには準備したい。

スクロールバー 08:15  スクロールバー - iOS プログラミングメモ を含むブックマーク

散々悩んだあげく、結局 soRa と同じ形式になってしまった…。当初考えていたやり方はとっつき難そうだから、オプションにしよう。

背景色設定がアナログバー 20:23  背景色設定がアナログバー - iOS プログラミングメモ を含むブックマーク

ってどういう意味だろう? あの RGB のスライダーかな。

SkyBook については、色変更の UI に悩み中。

細かく指定出来た方がいいかなーと思いつつ、青空読書みたいに選択方式のが設定するのは楽だし。うまい落としどころを考えないと。

最近 20:24  最近 - iOS プログラミングメモ を含むブックマーク

開発的な話題あんまり書いてない気がするなあ。UISlider の事で一個書きたい事があるんだが。

ART2ART22008/12/01 14:02サポートページを見るとこんなことが書いてありますよ。
「また、今後発売予定の iVBook という単独の商品では、/var/mobile/Media/Photos/EBooks の中にテキストをコピーすると、最初のテキストリストの画面から表示されます。」

JB用に機能制限版が出ていますがSkybookのほうが動作はきびきびしていますね。

ktakayamaktakayama2008/12/01 18:37なるほど。
今後発売予定って事は、まだ申請もしてない段階なんですかね。
なぜこんなやり方なんだろう。

とりあえず無料版落としてみましたけど、サクサク感はあんまり変わらない印象を持ちました。
ただ、いまいち操作しづらいような気がしますね。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081201