2011年3月3日木曜日

iPad2のミラーリング機能

iPad2が正式に発表されましたね。
なんとミラーリング機能が追加されたとか。…やっとか;
Apple Digital AVアダプタが必要らしいです。

↓詳しくはこちら↓
あなたの画面を共有しよう!Apple Digital AVアダプタ。

Apple Digital AVアダプタがあっても
iPad2以外はミラーリングできないとか。へえ。

2011年3月1日火曜日

ホームボタン押下でアプリを起動時の状態にリセットする※iOS4.0以降

iOS4.0以降はマルチタスクなのでホームボタン押下では
アプリは一時停止するだけです。次立ち上げた時は前回状態に復帰します。
これをFast App Switchingというらしい。

でもホームボタンを押したら4.0以前のように
アプリを完全終了させたいケースもある訳です。
ログイン系とかテストとかメモリとかメモリとかメモリとか。
それを可能にするのがApplication does not run in backgroundの設定です。

設定方法はプロジェクト名.plistで
Application does not run in backgroundの項目を追加し、
チェックをつけるだけ。

通常は4.0以降の実機やシュミレータにてビルドして実行した際ホームボタン押下で
プロジェクト起動しっぱなしですが、チェックを入れた際にホームボタン押下で
デバッグが終了しましたと、xcode上のステータスに表示されます。
覚えておくと便利かも。

※起動時には戻るとはいえ、アプリ自体はサスペンドにはいます。
 サスペンドから復帰させた時に起動画面に戻るだけです。
 完全終了でサスペンドからも消す方法はないんじゃないかと。

transformの合成、アニメーション基本(ちょっと修正

だいたいこんな感じ。Viewのtransformは常に上書きされる。
90度回転をtransformに設定した後、拡大を設定すると
90度回転はなかったことになってるので注意。
回転した状態で拡大する場合はCGAffineTransformConcatで
transformを合成して設定する必要がある。
ちなみに
animeView.transform = CGAffineTransformIdentity;
で初期状態にもどる

*3/1修正 回転も拡大縮小も中心起点だった;
      アフィン変換いまいちわかってないなー。
-(void)startAnime:(UIView*)animeView{
 //開始前に縮小しておく
 animeView.transform = CGAffineTransformMakeScale(0.1, 0.1);
 //アニメーション設定開始
 [UIView beginAnimations:nil context:NULL];
 //アニメーションの秒数
 [UIView setAnimationDuration:0.3];
 //動きの設定
 [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
 //delegate設定(endAnimeがいらないならnilでOK)
 [UIView setAnimationDelegate:self];
 //アニメーション終了後にやりたい処理
 [UIView setAnimationDidStopSelector:@selector(endAnime)];

 //90度回転しながら元の大きさに拡大
 CGAffineTransform transform1,transform2;
 transform1 = CGAffineTransformMakeRotation(M_PI * 90 / 180.0f);
 /*
 //ちなみに移動はこれ 
 transform1 = CGAffineTransformTranslate(transform1, 128, 128);
 */
 //拡大
 transform2=CGAffineTransformMakeScale(1.0, 1.0);
 //transformの合成
 CGAffineTransform concat = 
  CGAffineTransformConcat(transform1, transform2);
 //transformの適用
 [animeView setTransform:concat];
 //アニメーション設定終了
 [UIView commitAnimations];
}

-(void)endAnime{
 //アニメーション終了後にやりたい処理を書く
}

2011年2月28日月曜日

debugビルド以外NSLogを出さない

プロジェクトのOther Sourcesフォルダ内のアプリ名_Prefix.pchに以下を追加。
これを使うにはプリプロセッサにDEBUGを追加する必要あり詳しくはこっち
// Debbugログ出力切り替え
#ifdef DEBUG
# define NSLog(...) NSLog(__VA_ARGS__)
#else
# define NSLog(...) {}
#endif

NSNotificationの登録

//登録(didloadなどで)
[[NSNotificationCenter defaultCenter] addObserver:class 
selector:@selector(yobimethod:) name:@"notificationName" object:nil];

/*class内*/

-(void)yobu{//呼び出し※引数はなくてもOK 
   NSDictionary *userInfo = 
   [NSDictionary dictionaryWithObject:obj forKey:@"objkey"];
   
   [[NSNotificationCenter defaultCenter] postNotificationName:
        @"notificationName" object:nil userInfo:userInfo];
}


//呼び出されるメソッド
-(void)yobimethod:(NSNotification *)notification{
  NSString*key = [[notification userInfo] objectForKey:@"objkey"];
}

2011年2月24日木曜日

角丸UIView

#import <QuartzCore/QuartzCore.h>//使用クラスにインポートの必要あり

-(void)createKadomaru{
 UIView * maru = [[[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)] autorelease];
 maru.center = self.view.center;
 maru.backgroundColor = [UIColor whiteColor];
 maru.layer.cornerRadius = 4.0;//角の丸み 値が大きいほど丸い
 maru.clipsToBounds = YES;
 [self.view addSubview:maru];
}

←完成はこんな感じ。
今まで角丸部分は画像を用意してたのに…
これは便利。QuartzCoreのインポートを忘れないこと。
clipsToBoundsはUIViewのプロパティでYESならサブビューを
メインビューの内側に描画。(デフォルトはNO)

2011年2月22日火曜日

releaseとdebugで処理を変える

*前準備
Xcode上の左グループとファイル内の最上位にあるプロジェクト名のファイルをクリック
→情報→ビルドタブ→GCC 4.2 - プリプロセス項目内のプリプロセッサマクロに
DEBUGと追加

クラス(どれでもいい)に下記を書くことで処理を分けられる
#ifdef DEBUG
NSLog(@"debugはこっちを通る");
#else
NSLog(@"release,distributionはこっちを通る");
#endif