iMIDIConを1/5まで¥115で販売します。

LINEで送る
Pocket

明けましておめでとうございます。
iOS、Mac、Flash関連の情報を中心に今年は今までよりちゃんと記事を書けるように頑張ろうと思います。(毎年言ってる気がしますが。。。)

さて、本日は新年セールとして、1/5までは¥115円にてiMIDIConを販売します。
iPadでのMIDIコントローラーで、特にVJ向けに作っていますが試してみようという方はこの間にぜひご購入下さい。

buy iMIDICon from app store

※iTunes上で価格が反映されるまで時間がかかる場合がありますので価格が反映されている事を確認して下さい。

[iOS] UIViewの背景画像を設定する

LINEで送る
Pocket

iPadアプリを現在作っているのですが、背景画像の設定方法がわからなくて、Interface Builder上のいちばん下にUIImageViewを貼付けていたりしたのですが、他のパーツを動かすときにいちいち選択状態になって邪魔だったり、そもそも余分なインスタンスを持ってしまうのでバグが発生しやすくなるかも?という事でなるべく避けたかったので調べていたら、UIColorに画像を指定する方法を見つけました。
ほぼ100%こちらのブログを参考にさせていただいています。。すみません。

http://r-force.seesaa.net/article/164146136.html

使用方法はこんな感じです。background.pngってのは背景画像として使う画像ですよ。

UIImage *backgroundImage = [UIImage imageNamed:@”background.png”];
self.view.backgroundColor = [UIColor colorWithPatternImage:backgroundImage];
[backgroundImage release];

要するに、UIImageをUIColorのcolorWithPatternImage: を使う事で設定できる、という事ですね。
ActionScriptで言うところのbeginBitmapFill();みたいなものであり、
WPF/Silverlightで言う所のImageBrushって所でしょうかね。

これで簡単に背景画像を設定できるようになったので、リンク先にもあるようにどこまで応用できるかで外観のカスタマイズがどこまでできるか、というのが解りそうですね。

[iPad] 外部出力方法

LINEで送る
Pocket

やっぱり久々なポストです。

iPadでは外部映像出力が可能なので、それを試しているのですが、ちょっと解らずハマっていた事があったのでメモ程度に書いておきますね。デバッグするのも困難ですし。

基本的な実装の手順としては、下記の通りです。
1. つながっているスクリーンを[UIScreen screens]がNSArrayで取得する。
2. 1.で取得したUIScreenからお好みのUIScreenModeを取得する。
3. UIScreenを取得する。
4. 取得したUIScreenのcurrentModeに2.で取得した内容を設定する。
5. 表示させたいコンテンツを作成する。
6. 外部出力させるためにUIWindowを作る。
7. 6.に表示させたいコンテンツをaddSubView: する。
8. window.screen に3.のUIScreenを設定する。
9. windowの基礎的な設定を行う。

以上です。

——————————————

// ログとして外部モニターに表示する内容
// log message displayed in external monitor.
NSMutableString *str = [[NSMutableString alloc] init];
int screenCount = [[UIScreen screens] count];

// 設定されるスクリーンモード
// used screen mode
UIScreenMode *current = nil;

// checking each screen information
for(int i = 0; i < screenCount; i++)
{
 int modelen = [[[[UIScreen screens] objectAtIndex:i] availableModes] count];
 
 // checking each screen mode in screen.
 for (int j = 0; j < modelen; j++) 
 {
   // getting screen mode
   UIScreenMode *curMode = [[[[UIScreen screens] objectAtIndex:i] availableModes]
 objectAtIndex:j];
   
   // get information of screen.
   NSString *sstr = [NSString stringWithFormat:@"screen:%i, mode:%i, w:%f, h:%f,
  ratio:%f ---", i, j, current.size.width, current.size.height, 
current.pixelAspectRatio];
   
   [str appendString:sstr];

   // if curMode.size.width is larger than current, change current reference
   if(curMode.size.width > current.size.width){
    current = curMode;
    }
   }
  }

  // screen object 
  UIScreen *another = [[UIScreen screens] objectAtIndex:1];
  another.currentMode = current;
  CGSize size = current.size;
  uvc = [[UIViewController alloc] init];
	
  // create new window.
  UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectMake(
 0.0f,
 0.0f,
 size.width,
 size.height
)];
	
UITextView *tv = [[UITextView alloc] initWithFrame:CGRectMake(
0.0f, 0.0f, 800.0f, 800.0f)
];
[uvc.view addSubview:tv]; 
tv.text = str;

[tv release];

[window addSubview:uvc.view];
window.screen = another;
	
[window makeKeyAndVisible];
[window setHidden:NO];

—————————————————
※syntaxhighlighterをうまくつかえていないので改行をくわえています。

ちなみにgithubにのせてますのでご興味のある方はご覧下さい。
http://github.com/mmlemon/iPad-external-display-sample

何か間違いやご不明な点があればお気軽にご質問下さいね!