[Xcode TIPS] タップした座標を取得する方法

2011/09/27
CATEGORY : iPhone app , objective-c
このエントリーをはてなブックマークに追加

はいはいおはようございます。無職なのに貯蓄が増えてるあら不思議シブタニエイジです。

前回に引き続き、今回もobjective-cのTIPSです。

今回は"iOkonomiyaki 2.0.2"のトッピングのところで実装している、タップポイントの座標を取得する方法をご紹介します。

 

ババっとこんな感じ

あんまり説明いらないかもしれませんが、"UIResponder.h""- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;"メソッドを使用します。

//  touchTestViewController.h ----------------------------------
@interface touchTestViewController : UIViewController {
    CGPoint pickPos;
}
@end
//  touchTestViewController.m ----------------------------------
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    pickPos = [touch locationInView:self.view];
    NSLog(@"x=%f",pickPos.x);
    NSLog(@"y=%f",pickPos.y);
}

という感じです。

"- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;"メソッドは、タッチした際に実行されます。

他に、タッチの終わり(指を離した時)に実行する"- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;"というメソッドもあり、これらを組み合わせて各座標の差異から、フリックの方向を検出したりすることも可能だったりします。

なんてなこと書いたのも、今現在フリックだけで完結するとあるゲームを構想中。。。
10月中にリリース予定!!

にしても、objective-cは英語まんまなところが多々あるので非常に分かりやすい。

 

実際のコード

というわけで、最後に実際に使用したコードっぽいのをのっけておきます。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *topping = [touches anyObject];
    pickPos = [topping locationInView:self.view];
    //配置する画像を設定
    UIImage *img = [UIImage imageNamed:@"hoge.png"];
    //50*50の画像の中心点をタップした座標に設定
    CGRect rect = CGRectMake( pickPos.x-25 , pickPos.y-25, 50 , 50 );
    //imgを格納したimageviewをタップした座標に配置<br />
    UIImageView *imageview = [[UIImageView alloc] initWithFrame:rect];
    imageview.backgroundColor= [UIColor clearColor];
    imageview.image = img;
    [self.view addSubview:imageview];
}

ほんとはもっと複雑なんですが、だいたい書いてることはこんな感じです。
というわけで、何かのお役に立てれば幸いです。

そして、"iOkonomiyaki"をDLして課金してくれたらもっと幸いです。

 

今回の一言

タイトルにXcodeって書いてるケド、Xcodeっぽいこと何も書いてないことに気付く。

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2013 THE AGE