Hatena::Groupiphone-dev

3ヶ月でiPhoneアプリを1本作る日記 RSSフィード

参考になった記事があれば☆をぽちっとしていただけると

2009-12-27

[][]NSBundleでファイルの読み込み 00:53 はてなブックマーク - NSBundleでファイルの読み込み - 3ヶ月でiPhoneアプリを1本作る日記

NSString* path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"txt"];
NSString* fileContents = [NSString stringWithContentsOfFile:path];

ofType で拡張子を指定するんだけど、js だったらなぜか読み込めない。これって使える拡張子が決まっているのだろうか…。

KishikawaKatsumiKishikawaKatsumi2009/12/28 20:12*.js はデフォルトでソースファイルとして扱われるのでバンドルに含まれないんですよ。
ターゲット>[アプリ名]>ソースをコンパイル
と開いて、*.js ファイルを「バンドルリソースをコピー」の方にドラッグして、再ビルドすればバンドルから読み込めるようになります。

ちなみに、
[[NSBundle mainBundle] pathForResource:@"filename.txt" ofType:nil];
のように、リソース名に拡張子を含めれば、2つ目の引数は無くてもいいです。

soheisohei2009/12/29 11:05KishikawaKatsumi様、
なるほど、そういうことなんですね。理解できました。御丁寧に説明ありがとうございました!

2009-12-23

[][]加速度センサを使う 23:42 はてなブックマーク - 加速度センサを使う - 3ヶ月でiPhoneアプリを1本作る日記

- (void) testAccelerometer {
	// 加速度センサのインスタンスを作成
	UIAccelerometer* accelerometer;
	accelerometer = [UIAccelerometer sharedAccelerometer];
	accelerometer.updateInterval = 0.3f;
	accelerometer.delegate = self;
}

// 加速度センサ検出
- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration {
	NSLog(@"x=%f, y=%f, z=%f", acceleration.x, acceleration.y, acceleration.z);
}

このように簡単に取得できるんだけど、これをどう使うかが難しいところだね…。

振ったのを検出するのに、とりあえずこんな感じでやってみた。もっと良い方法あるかなぁ?

accelerometer.updateInterval = 0.3f;

if(abs(acceleration.x) > 0.3 || abs(acceleration.y) > 0.3) {

2009-12-20

[][]レイヤーを使ったアニメーション 11:46 はてなブックマーク - レイヤーを使ったアニメーション - 3ヶ月でiPhoneアプリを1本作る日記

アニメーションの処理方法は3種類あるで書いた2つめの方法。

レイヤーを使った方法だとこんな感じ。

UIImage* image=[UIImage imageNamed:@"image.png"];
//レイヤーの生成
CALayer* layer=[CALayer layer];
[layer setBounds:CGRectMake(0,0,image.size.width,image.size.height)];
[layer setPosition:CGPointMake(60,60)];
[layer setContents:(UIView*)image.CGImage];
[self.view.layer addSublayer:layer];

//レイヤーアニメーションの生成
CABasicAnimation* anime=[CABasicAnimation animationWithKeyPath:@"position"];
anime.duration = 1.0f;
anime.autoreverses = YES;
anime.repeatCount = 999;
CGPoint position = layer.position;
anime.fromValue = [NSValue valueWithCGPoint:position];
position.x += 200;
anime.toValue = [NSValue valueWithCGPoint:position];
[layer addAnimation:anime forKey:@"anime"];

アニメーションを停止するには、removeAnimationForKey メソッドを使う。

[layer removeAnimationForKey:@"anime"];

[]layerの重なり順を設定する 00:09 はてなブックマーク - layerの重なり順を設定する - 3ヶ月でiPhoneアプリを1本作る日記

addSublayer だと、一番前面に表示されるようになる。

例えばUIコントロールがあってその背面に表示させたい場合などは、insertSublayer を使ってindexを指定すると良い。

[self.view.layer insertSublayer:layer atIndex:0];

2009-12-18

[][]アニメーションの処理方法は3種類ある 10:07 はてなブックマーク - アニメーションの処理方法は3種類ある - 3ヶ月でiPhoneアプリを1本作る日記

  1. UIViewで表示しているものを直接動かすもの
  2. Core Animationを使い「レイヤ」を処理するもの
  3. トランジション」を用いるもの

簡単さ手軽さの順で言えば、3>1>2かな。本格的にやるなら2。


アニメーションの処理については、オライリー本にはあまり書かれていなくて、「iPhone SDK プログラミング大全」の書籍にけっこう書かれていました。

[]UIView Animation 22:52 はてなブックマーク - UIView Animation - 3ヶ月でiPhoneアプリを1本作る日記

上で紹介した方法の1番目の方法。

UIView のアニメーション機能で簡単に使えます。

こんな感じです。

UIImageView* _imageView;

- (void)loadView {
	[super loadView];

	//イメージビュー生成
	_imageView=[[UIImageView alloc] init];
	UIImage* image=[UIImage imageNamed:@"image.jpg"];
	[_imageView setImage:image];
	[_imageView setFrame:CGRectMake(0,0,image.size.width,image.size.height)];
	[self.view addSubview:_imageView];
	[self testAnimetion];
}
- (void) testAnimetion {
	//アニメーションの開始
	[UIView beginAnimations:@"testAnimation" context:NULL];
	[UIView setAnimationDuration:0.1f];  // 時間
	[UIView setAnimationCurve:UIViewAnimationCurveLinear]; // 加速パターン
	[UIView setAnimationDelegate:self];    // デリゲート
	[UIView setAnimationRepeatAutoreverses:TRUE];	// リバース動作
	[UIView setAnimationRepeatCount:999];  // 繰り返し回数
	[UIView setAnimationDidStopSelector:@selector(animationDidStop:)];
	
	//イメージの移動
	CGRect frame=_imageView.frame;
	frame.origin.x=50;  // xが 0〜50 まで移動
	_imageView.frame=frame;
	_imageView.alpha=0; // 透明度を0に

	//アニメーションの終了
	[UIView commitAnimations];
}

//アニメーション完了イベント
- (void)animationDidStop:(NSString*)animationID finished:(BOOL)finished context:(void*)duration {
    NSLog(@"アニメーション完了");
}

beginAnimations から、commitAnimations までの間で、アニメーションの動作を記述します。

繰り返しの設定やリバース動作も設定できで、簡単ですね。


ここを参考にさせていただきました。

http://www.saturn.dti.ne.jp/~npaka/iphone/ViewAnimeEx/index.html

no title

2009-12-16

[]UISlider:スライダーコントロール 21:40 はてなブックマーク - UISlider:スライダーコントロール - 3ヶ月でiPhoneアプリを1本作る日記

簡単に使うサンプルはこんな感じ。

UISlider *slider;

- (void) makeSlider() {
	slider = [[UISlider alloc] initWithFrame:CGRectMake(20.0,20.0,200.0,0.0)];
	slider.minimumValue = 0.0;
	slider.maximumValue = 100.0;
	slider.value = 50.0; // initial
	
	[slider setShowValue:YES]; // for debug
	[slider addTarget:self action:@selector(updateSlider:)
			forControlEvents:UIControlEventValueChanged];
	[self.view addSubview:slider];
}

- (void) updateSlider:(UISlider *)aSlider {
	NSLog(@"value=%f", aSlider.value);
}

f:id:sohei:20091216214458p:image

実行画面

スライドしたときにupdateSliderが実行される(され続ける)。

デフォルトは、0.0〜1.0の範囲。valueでデフォルト値を設定する。

setShowValueメソッドはvalue値を横に表示してくれるけど、非公開APIみたい。

2009-12-15

[]アプリ起動時のスプラッシュ画面表示 11:08 はてなブックマーク - アプリ起動時のスプラッシュ画面表示 - 3ヶ月でiPhoneアプリを1本作る日記

あ、やっぱり簡単なやり方あったんだ…。

Resources ディレクトリに Default.png というファイル名で入れておくだけでいいみたい。

[iPhone 開発メモ] アプリ起動時のスプラッシュ画像とアイコンを設定する方法 | Sun Limited Mt.

2009-12-13

[]タイマー(NSTimer)を使う 22:30 はてなブックマーク - タイマー(NSTimer)を使う - 3ヶ月でiPhoneアプリを1本作る日記

何秒後に実行とか、何秒おきに実行とかやるとき。

こんな感じ。

NSTimer* timer;

- (void) hogeTimer {
timer = [NSTimer 
 scheduledTimerWithTimeInterval:0.5
 target: self 
 selector:@selector(hogeHoge:) 
 userInfo:nil 
 repeats:YES];
}

- (void) hogeHoge:(CFRunLoopTimerRef *)timer {
    NSLog(@"0.5秒おきに実行されます");
}

- (void) startHogeHoge {
    [self hogeTimer]; // timerをスタート
}

- (void) stopHogeHoge {
    [timer invalidate]; // timerをストップ
}

[]画像を表示するのが大変なら、Viewの背景に画像をセットしちゃうのが簡単かもしれない 22:34 はてなブックマーク - 画像を表示するのが大変なら、Viewの背景に画像をセットしちゃうのが簡単かもしれない - 3ヶ月でiPhoneアプリを1本作る日記

画像を表示するのは大変だ…とかって話もあるけど、Viewの背景に画像をセットしちゃう!ってのが簡単かもしれない。

UIImage *mainImage = [UIImage imageNamed:@"image.jpg"];
self.view.backgroundColor=[UIColor colorWithPatternImage:mainImage];

[]ショートカットキー 15:54 はてなブックマーク - ショートカットキー - 3ヶ月でiPhoneアプリを1本作る日記

Xcodeのよく使うショートカットキー - griffin-stewieの日記

俺も最近知ったけど、シンボル選択してダブルクリックは必須で知っておくべき。

他、インデントのやり方とか。

ショートカットキーは、知ってると知ってないとだとだいぶ違いが出てくるので覚えておくべきですね。

[]プロジェクト名を変更する! 19:07 はてなブックマーク - プロジェクト名を変更する! - 3ヶ月でiPhoneアプリを1本作る日記

Xoodeで適当な名前でプロジェクトを作ったはいいけど、出来上がってからそれに合うプロジェクト名に変更したいという場合、ありますよね。

結構大変ですが、やればなんとかできる。

この辺を参考に…。

setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key

こんなエラーが出た場合は、xibファイルの記述を確認しよう。

[]CodeSign error: code signing is required for product type 'Application' in SDK 'Device 21:25 はてなブックマーク - CodeSign error: code signing is required for product type 'Application' in SDK 'Device - 3ヶ月でiPhoneアプリを1本作る日記

MacBookで作ったプロジェクトをiMacの方で開き、実機で動かそうとするとこんなエラー。

CodeSign error: code signing is required for product type 'Application' in SDK 'Device - iPhone OS 3.1.2'

この場合、以下の点を確認してみよう。

  • 使っているSDKのバージョンが3.1.2であることを確認。
  • プロジェクトの設定で「コード署名ID」が Device - iPhone OS 3.1.2 になっていることを確認。

f:id:sohei:20091216220436p:image:w300

[]iPhone Developer Program の登録と証明書のインストールとか 22:22 はてなブックマーク - iPhone Developer Program の登録と証明書のインストールとか - 3ヶ月でiPhoneアプリを1本作る日記

iPhone Developer Programの登録自体はこの前やったので、証明書のインストールとかをやった。

これがまた大変で…。2時間くらいかかったかな。

この辺を参考にした。