UITableView もどきのデモ

MacDev

数日前、Thunderbolt を搭載した新 MacBook Pro の発表の直後に、Lion の詳細 & Developer Preview 版が突然公開された。

その頃自分は、Mac 上で動き、UITableView のように手軽に使え、CALayer を表示に使い、セルを効率よく再利用して、行数が増えても表示が軽いテーブルビューを作るため、実装を進めていた。

Mail.app のスクリーンショットや Twitter での数人の発言から、Lion では NSTableView が UITableView の良さを取り入れて生まれ変わっていることが予想でき、作る必要はなかったみたい。それでも、何千個にもなるセルの効率のいい位置計算方法を考えたり、いろいろと勉強になった。

(↑見た目から、何に使うために作っていたのかわかるはず...)

まだ未完成だけど、デモのためのアプリケーションを作ったのでここに置いておく。(Snow Leopard でのみ動作確認。使用は自己責任で。)

セクションと行の数は起動するたびに変わる。

画面からはみ出たセルが消え、見える範囲に入った部分のセルとして再利用される様子がよくわかるので、こういうビューを作るときの参考になるかも。(右矢印キーを押して右カラムにいくと "Clip views" チェックボックスがある。)

iOS っぽいスクロールバーは Lion の挙動を予想したもの。カーソルを乗せると背景が現れるのは予想が正しかったみたい

2011.2.28 追記

PXListView というものを発見。OS X 10.5 以降に対応しているみたい。ソースも公開されている。

-reloadData が呼ばれたとき、delegate の -listView:heightOfRow: をすべての行に対して呼び出し、行の高さではなく y = 0 からの絶対量をキャッシュするようになっているみたい。自分も同じような手法を使った。

2 つのプロジェクトについて

Products

Animatabler

Snow Leopard になってから 64 ビットで動くソフトが増えてきた。Animatabler も 64 ビット化しないと 32 ビットのソフトでしか動作しない。

Animatabler でウインドウを変形させるのに使用している Core Graphics のプライベート関数 CGSSetWindowWarp() は本来、ウインドウを Dock にしまうときのジニーエフェクトや Exposé のウインドウ縮小などを実現するために用意されたものらしいけど 64 ビットでは使用されていないみたいでこれを呼んでも何も起きない。

個人的には CGSSetWindowTransformAtPlacement() が代わりに用意された関数ではないかと考えているけど、資料が少なくわからないという状況...

と書いていると Deskovery というソフトを発見。Compiz Fusion のふにゃふにゃウィンドウ移動を再現している。よくやるな〜

64 ビットには対応していないけど、環境設定アプリケーションを追加したバージョン 2.1.1 をリリース。ダウンロードはこちらから。(遅くなってしまったけど、Shige さん感謝です!)

ZMGoogleCSS

去年 5 月の Google 仕様変更で使えなくなった。CSS を上書きする方法の限界を感じてしまった。

Google が仕様を変更するたびに複雑な HTML 構造を調べ、CSS で無理矢理デザインを変更するには時間と労力がかかりすぎるし、できることの幅も少ない。

Google の提供する API を使ってデザインする方法もあり、デザインはいいものが作れそうだけど(→ Google Powered Site Search with jQuery)、通常の検索ページと URL が変わってしまうのは不便だし、JSON/Atom Custom Search API は "100 search queries per day" という制限があるので現実的ではない。

ほかの方法もなくはないけど、Google の規約に引っかかる可能性が出てくる。

これに影響されてこの分野が盛り上がることを期待してリリースしたけど、上記の問題もあり、なかなか作る人は現れない...

ハック系のソフトは維持が大変

他者のソフト/サービスをプライベートな方法で拡張するのは仕様変更のリスクが大きい。個人的に使える時間が限られてきたため、期待してくれていた方々には申し訳ないけど ZMGoogleCSS と Animatabler の開発は、しばらく休止します。

今年は Mac App Store が始まったこともあり、正当な方法で作ったソフトを中心にリリースしていく予定。

© 2005-2019 zumuya