2010年12月24日金曜日

delegateとprotocolによる通知

delegateやらprotocolやらどっちに宣言するんだがごっちゃになるので図にしてみた。


たぶんこれであってる…はず。

2010年12月21日火曜日

UIViewからUIImageを生成

//UIViewからUIImage作成
- (UIImage *)createImage:(UIView *)view
{
    UIImage *createImage;
    UIGraphicsBeginImageContext(view.frame.size);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    createImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return createImage;
}
生成したUIImageがキャッシュに残るかは調べ中

追記:生成される画像はautoreleaseが走る…らしい。
   多分大丈夫?

2010年12月17日金曜日

ipadアプリの外部出力(ミラーリング)

フリーで素敵なソースがありました。

iPadの画面を外部モニタへ出力する「TVOutManager」

中を見たけど難しい…じっくり解析します。

何となく仕組みがわかったので追記;
使い方は
1.TVOutManagerクラスを使いたいプロジェクトに入れる
2.初期表示するビューコンにTVOutManager.hをインポート
3.切り替えスイッチを用意してオンで
[[TVOutManager sharedInstance] startTVOut];
オフで、
[[TVOutManager sharedInstance] stopTVOut];
を実行する
※確認にはiPad専用のVGAアダプタと外部出力モニタが必要

>iPad自体にミラーリング機能はない…不便だ

>TVOutManagerは実機で表示しているスクリーンを画像化して、
 外部出力に貼付ける作業を別スレッドで定期的に行う
 ことでミラーリングしているようにみせているっぽい

>どうやらスクロールなど他の処理が走っている際には
 画像の更新を行わない。スクロールはかくかく表示になる 

>viewdidloadにスタートメソッドを入れてもなぜかうまく
 動作しない。明示的にボタンなどでスタートさせないとうまく行かなかった。
 viewdidloadにタイマー仕込んでも駄目だった。

>実機の回転対応はするが、やたらと回転する。修正が必要?
(初期画面がlandscapeだと縦に表示されてしまうなどの問題も)

>外部と実機2つのwindowに同じインスタンスを乗せることができない…?
 これができたらわざわざ画像化なんてしないか…。

わーJailbreakしてしまいたいー。

*外部出力で参考になった記事*
[iPad] 外部ディスプレイに出力する
[iPad] 外部出力方法
iPadからVGA出力
iPadでの外部モニタ出力←Jailbreakの方法も