スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

モニター選択画面

iPhoneアプリ

マルチモニター環境に対応すべくiPhone側のモニター選択画面作ってました。
出来は画像の通りで、Safariのタブ選択画面っぽい感じにしてみました。
見た目通りに真ん中に来てるモニターが選ばれて、完了を押すとその画面のリモートに切り替わります。
それぞれのサムネイルは静止画ではなくカクカクではあるものの定期的に更新される動画になっています。

Safariの場合は選択するとサムネイルが画面のサイズに拡大されて、ブラウザにスムーズに切り替わりますが、今回のこれはそうはなっていません。というのも、サムネイルが常に画面全体を映してないとだめなわけで、常に画面全体を写しているわけではないリモート操作時の画面とスムーズに繋げられないからです。この選択画面に入るときに操作画面を急速縮小するっていう手がありますが、多分見た目的には微妙です。

サムネイルがやや小さく見えるのは、サムネイルの最大縦横を固定しているからで、最近の横長モニターを表示するとどうしても横長になってしまいます。最大縦横が固定ってことからサムネイルの大きさは実際のモニター解像度に依存してません。この画像でいうと左のモニターの解像度は1920x1080ですが、右のは1280x800なんですが、右の方が幅固定の影響で大きく写っています。もっと解像度比を見た目で表現できればよかったんですがいいアイディアが出ず。
同じくこの画面では各モニターのピクセル的なつながりも表現できていません。プライマリモニターが実はセカンダリモニターの右にあっても、この表示になってしまいます。

モニターを実際の大きさ比で、実際の配置にならべて表示するようにしたほうがよかったかなぁ。。。


■技術的なこと
この画面はOpenGLでごりごり書いたりせずに素直にUIViewとかで作ってます。
サムネイルはUIImageViewで出していますが、問題は影。
UIViewのCALayerで影を出すってのを横見ますが、この方法を使うと激重になります。
考えれば当然で、Viewの描画のたびに影の形状を再計算しているんでしょうから、そりゃー重い。
そこで私の場合は、Quartzで影を描いたUIImageを作ってそれを表示しています。
そうすれば重いのは最初の一回だけで、以降は画像の表示だけになるんでサクサク動作になります。
(他に影を高速描画するって方法あるのかなぁ。知らないだけの可能性が高いか。)

QuartzではUIGraphicsBeginImageContextで準備をし、取り出したcontextに描画した内容をUIGraphicsGetImageFromCurrentImageContextでUIImageにできるのでそれを使います。パスに沿って図形を描画する際に影を描画する機能があるので、かなり簡単に影を描けます。単純に画像なら透明度は保存されないんですけど、こうやると透明度付き画像としてUIImageが作られるので便利。

■苦労
苦労は描画部分ではなく通信部分でした。
TCPの接続一本をリモートの画像取得とサムネイル取得を切り替えて使うわけですが、サムネイル画面への遷移はユーザー操作なわけで、レスポンスを遅らせるわけにはいかずに、即遷移させます。
つまり遷移時に前の通信の最中である場合があり、見た目とは別の部分の通信をしていることがあるというわけです。この画面を閉じるときはViewのメモリが開放されたあとに、通信が完了してデータがやってくる場合もあるので、一歩間違えればエラーで落ちてしまいます。内部で待たせたりしても、デッドロックの危険が出たりとなかなかに厄介。さらには通信が不安定な3Gでの動作も考えると、、、
ただでさえ通信とか描画などスレッドがある上に、Viewも複数あると頭がついていかなくなりますね。。。

コメントの投稿

非公開コメント

Go To 物置。
プロフィール

書いてる人:つん

まったりのんびり。書いてる人の息抜きブログです。

多分連絡先↓
metal_tsun@yahoo.co.jp

カテゴリー
リンク
月別アーカイブ
バロメーター
Java歴:2005年2月から今まで。
3DCG歴:2005年8月から数年。
C歴:2006年4月から今まで。
VB歴:2007年3月からちょっと。
Delphi歴:2007年3月からちょっと。
PIC歴:2007年5月から数年。
イラスト歴:2007年12月から今まで。
DTM歴2008年2月からちょっと。
PHP歴2008年4月からちょっと。
C++歴2008年4月から今まで。
C#歴2009年1月から今まで。
Objective-C歴2009年4月から今まで。
CSS歴2012年5月から今まで。

ブログ開始日2005/10/11


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。