2011/02/04

CATextLayer 整理

先日、
「CATextLayerでググル先生に聞くと、10番目くらいになってるよ」
と言われ、見てみると確かに。

そして今見ると、5番目になってれぅ。


何故なんだググル先生。。。


全国のiPhoneビルダーの皆様苦労されてますね。
確かにCATextLayerって情報少ないですよね。


何を間違ってか、
こんなニッチな趣味開発日記ブログに迷いこまれた方向けに。


基本はCALayerの派生クラスなんで、扱いは一緒です。


ただUILabelと違って、
adjustsFontSizeToFitWidth(自動リサイズ)や、
baselineAdjustment(ベースライン調整)が
用意されていないので、
自前でフォント幅や高さを図る必要があります。


この当たりはNSStringのメソッドで調べられます。



[調べたい文字列 sizeWithFont:[UIFont systemFontOfSize:フォントサイズ]].width


高さはフォント次第ですが、
小文字の"y"など、ベースラインより下に表示される文字を使う場合、
やはり自前で調整しなければ行けないので、
boundsを移動するなどで調整しましょう。



そういった苦労をすれば、CALayer同等の扱いができるので、
InterfaceBuilderで画面を作らず、
ViewとLayerベースで画面を作ってる人は重宝すると思います。


2Dゲーム系とかにいいんじゃないでしょうか。

2011/02/03

歌詞ウインドウ

ジェスチャー連動配置換えフォーメーションを色々触ってたら、
お約束の如く、アクセス違反エラーでプロジェクトのどこかが崩壊。
根本のメモリ管理を弄ってないので、
おそらくタイミングを弄った当たりだとして、そのあたりを修正。
治った。
なんとなく理解。
気合でバグ前の時点まで回復コーディング。およそ四時間。




歌詞ウインドウのアルバムアートワークは、
Amazonなどで多い、500x500を想定して組んでたんですが、
iPhone4/iPodTouch4Gは960x640なのでちょっと小さめに出ます。

純正オーディオアプリだと640x640まで拡大するので、
ならこちらもそういうモードを作るかと。


標準 500x500


 歌詞・TAB表示モード 200x200


拡大表示用モード 640x640


右側が少し余ったけど、320Pxほど。
次曲情報だしたら、標準モードと変わらないし、どーしよう。

少し考えよう。そうしよう。

2011/02/02

続:Block構文

前エントリと分離。

そして、そんなブロック構文を使って。


右下に次の曲が表示されている状況でその曲に移動した場合、

つまり
・現在の曲が再生終了して、次の曲が再生される
・明示的に曲送りをした
という場合のみ、


右下のタイトル、アーティスト名、アルバムアートを、
アニメーションで移動させて、なんかいい感じにしてみた。
前述のフレームワークバグもあり、組み換えも含めて4-5時間ほど。


Imageを拡大しても綺麗に表示できるように、
キャッシュしてるアルバムアートのサイズを替えたり、
なんか何を苦労してるんでしょうね。てへ。


アニメーション中に曲の変更割り込みが入った場合は、
アニメーション終了後、変更するようにしたり。協調制御がちと面倒。




短いタイトルと短いアーティスト名の場合は、
少し位置を変更しようかとか思ったりもしたけど、
次曲アニメーションがさらに複雑になるから悩むなこれ。

Block構文

IOS4SDK以降だと、


レイヤーアニメーションをさせるときに、
CATransactionやViewAnimationで
[CATransaction setCompletionBlock]
っていうのを使うと、コールバックを使わないで、
インラインブロックで続きの処理が書ける。ネスト可能。


なんだけども、


kCATransactionAnimationDurationの値を変更して、
ImplicitAnimation(暗黙のアニメーション)の規定値の0.25秒を変更しても、


CompletionBlockの構文は0.25秒で動き出す。




先から倒れるドミノ倒しか


明らかにフレームワークのバグだこれ。
そいえば前見つけて、コールバック処理と併記に書き換えたんだった。


いつ直るかわからないので、トリガー部分だけ、別にコールバックを取ることにする。
とかやってたら日付変わってた。





2011/01/31

テストツール

UDPの構造体変更をまにょまにょしながら、
Windowsの送信ツールの画面を修正。


「ちゃんとネットワーク周りの修正やってますよ的な」
オーラを放ちつつ、


MusicLayerのViewコントローラー変更とかしてたりする。

曲情報関連は、各種スキンのSubLayerとして持ってたんだけど、
メモリが勿体無いのと、
SubLayerにしなくてもカスタマイズする方法を思いついたので。

UDPデータ (Rev1.6)

タイヤ空気圧は、最小が0.1だけどkgm/cm2でなく、
kpaだともう少し細かく取れている。

ってことは0.01kgmまで取ってるのかもということで、
Byte→unsigned short。

kpaで換算してるかもだけど、どちらにしろByteだと足りない。


そいえば電池残量があったなーということで、
1バイトずつ足しておく。

充電電池でないから、SOC(充電%)でなく、
電圧でくるんだろうか。

まぁByteで足りるからいいや。

- - - - - - 
Byte[8]            ID                     //ただし[7]は\0固定

- - - - - - 
unsigned short  エンジン回転数   //LSB=1rpm
unsigned short  車速           //LSB=0.01km/h  
Byte               スロットル開度    //LSB=1%    
Byte               燃料                 //LSB=1%  
Byte               空燃比              //LSB=0.1%  
Byte               電圧                 //LSB=0.1V
- - - - - - 
unsigned short  吸気圧              //LSB=0.1Kpa  (絶対圧)
unsigned short  吸気温度     //LSB=0.1℃
unsigned short  水温        //LSB=0.1℃
unsigned short  排気温度     //LSB=1℃
- - - - - - 
unsigned short  室温        //LSB=0.1℃
unsigned short  外気温       //LSB=0.1℃
unsigned short  O2センサー        //LSB=0.1V
unsigned short  方位        //LSB=0.1 磁北=0 東=90
- - - - - - 
Byte               緯度DDD                 //NMEA Format
Byte               緯度MM                   //NMEA Format
short              緯度.MMMM             //【N】MSB=0/【S】MSB=1
Byte               経度DD                   //NMEA Format
Byte               経度MM                  //NMEA Format
short              経度MMMM             //【E】MSB=0/【W】MSB=1
- - - - - - 
unsigned int     車速パルス       //LSB=1パルス(64パルス計算) 
- - - - - - 
unsigned short  タイヤ空気圧(FR)       //LSB=0.1Kgm/cm2
unsigned short  タイヤ空気圧(FL)       //LSB=0.1Kgm/cm2
unsigned short  タイヤ空気圧(RR)      //LSB=0.1Kgm/cm2
unsigned short  タイヤ空気圧(RL)      //LSB=0.1Kgm/cm2
- - - - - - 
Byte               タイヤ空気温度(FR)       //LSB=1℃
Byte               タイヤ空気温度(FL)       //LSB=1℃
Byte               タイヤ空気温度(RR)       //LSB=1℃
Byte               タイヤ空気温度(RL)       //LSB=1℃
Byte               TPMS電池残量(FR)       //0(空)-3(満)  <<<NEW
Byte               TPMS電池残量(FL)       //0(空)-3(満)  <<<NEW
Byte               TPMS電池残量(RR)       //0(空)-3(満)  <<<NEW
Byte               TPMS電池残量(RL)       //0(空)-3(満)  <<<NEW
- - - - - - 
Byte               ステータスBit        ///+0(LSB)  ライト
                                     ///+1         GPS捕捉
                                     ///+2         後退信号
                                     ///+3         サイドブレーキ 
                                     ///+4         可変バルブタイミング
unsigned short  Reserved 燃圧     //LSB=1Kpa  (絶対圧) (取得不可)
unsigned short Reserved 油圧     //LSB=1Kpa  (絶対圧) (取得不可)
unsigned short  Reserved 油温  //LSB=0.1℃  (取得不可)
-----------------------------------------------------------------

2011/01/30

InterfaceBuilderさん


 XCode4はInterfaceBuilderが統合されてるんだった。
紐付けが右ドラッグするだけ。楽々。

そ、そう、これを待っていたのよ。

UDPの受信ツールを作り替えるのが、
面倒臭かったわけじゃないんだからねっ!

とりあえず今日のところは、
IBOutlet繋げるだけなんだからねっ!

送信ツールはVC++.netだった。あっちも直さないと。

UDPデータ (Rev1.5)

追記:今見るといろいろずれてれぅ




- - - - - - 
Byte[8]            ID                           //ただし[7]は\0固定

- - - - - - 
unsigned short  エンジン回転数    //LSB=1rpm
unsigned short  車速         //LSB=0.01km/h  
Byte               スロットル開度         //LSB=1%    
Byte               燃料                        //LSB=1%  
Byte               空燃比                     //LSB=0.1%  
Byte               電圧                        //LSB=0.1V
- - - - - - 
unsigned short  吸気圧                    //LSB=0.1Kpa  (絶対圧)
unsigned short  吸気温度      //LSB=0.1℃
unsigned short  水温         //LSB=0.1℃

unsigned short  排気温度      //LSB=1℃
- - - - - - 
unsigned short  室温         //LSB=0.1℃
unsigned short  外気温        //LSB=0.1℃
unsigned short  O2センサー             //LSB=0.1V
unsigned short  方位        //LSB=0.1 磁北=0 東=90

- - - - - - 
Byte               緯度DDD                 //NMEA Format
Byte               緯度MM                   //NMEA Format
short              緯度.MMMM             //【N】MSB=0/【S】MSB=1
Byte               経度DD                   //NMEA Format
Byte               経度MM                  //NMEA Format
short              経度MMMM             //【E】MSB=0/【W】MSB=1
- - - - - - 
unsigned int     車速パルス        //LSB=1パルス(64パルス計算) 
- - - - - - 
Byte               タイヤ空気圧(FR)          //LSB=0.1Kgm/cm2  <<<NEW
Byte               タイヤ空気圧(FL)          //LSB=0.1Kgm/cm2  <<<NEW
Byte               タイヤ空気圧(RR)          //LSB=0.1Kgm/cm2  <<<NEW
Byte               タイヤ空気圧(RL)          //LSB=0.1Kgm/cm2  <<<NEW

Byte               タイヤ空気温度(FR)       //LSB=1℃  <<<NEW

Byte               タイヤ空気温度(FL)       //LSB=1℃  <<<NEW

Byte               タイヤ空気温度(RR)       //LSB=1℃  <<<NEW

Byte               タイヤ空気温度(RL)       //LSB=1℃  <<<NEW
- - - - - - 
Byte               ステータスBit        ///+0(LSB)  ライト
                                 ///+1         GPS捕捉
                                    ///+2         後退信号
                 ///+3         サイドブレーキ 
                                                   ///+4         可変バルブタイミング
unsigned short  Reserved 燃圧                       //LSB=1Kpa  (絶対圧) (取得不可)
unsigned short Reserved 油圧                       //LSB=1Kpa  (絶対圧) (取得不可)
unsigned short  Reserved 油温           //LSB=0.1℃  (取得不可)
-----------------------------------------------------------------
緯度経度が順番がくしゃくしゃだった。反省はしていない。

車速パルスは、電源投入時からの積算値を貰おうか。
そうすると、パケット取りこぼしても、走行距離が正しく取れる。

うちの妹の無線LANがこんなに繋がらないわけがない

引越しした妹様から、「無線LANがブツブツ切れる」との連絡を受けて、出張。

------------------------------------------------------------
・SSIDが取れたり取れなかったりする。
  →離れた部屋のiPhoneで取れてるのに、
   目の前のThinkPad(ダイバシティアンテナ)で取れない。

・別の無線LAN機器のデバイスを有効にすると、別のが切れたりする。

・ARPテーブルを見ると、繋がったことがあるのに、
  ARPテーブルに(ルーターのログ上では)一度も書かれていない。

・一定時間経つとPingすら通らなくなる。

・光接続なのに、有線LANでもやたら遅い。

・11g対応機器なのに、AOSSでも手動でも11aにされる機器がある。
------------------------------------------------------------
これはルーターが逝ってると判断し、適当な無線LANルーターを買ってくる。
「実効速度300Mbps!」とか、ああ最近は11n対応が当たり前なのね。



新しいルーターを電源投入。SSIDとパスワードを入力するといきなり無線で繋がる。


ブラウザーでWebを見ようとすると、
インターネット接続の設定へリダイレクトされる。
へー偉いな、最近のルーターは。



速度も光接続レベルで出てるので、やはりルーターで問題なかったようだ。


NTTは原因判別出来ずに投げたらしいけど。
まぁNTTの代理業者レベルの素人では無理かな、このレベルになると。

昔、実家に来たときに【TRACEROUTE】コマンドすら知らなかったしなぁ。


以上にて出張修理完了。

工賃は東京ばな奈ナリ。ばな奈うまうま。

2011/01/29

ナンシーより緊急連絡

友人様から痛車用のロゴ依頼がきたので、サクサク作る。

元絵が小さすぎてボンネットには解像度が足りないので、

フォトショップでベクタートレース。




最近フォトショップでパスを書くお仕事がやたら多い。