• ベストアンサー

Objective-C オブジェクトの座標を取得

iPhoneアプリを作りはじめたばかりの初心者です。 あるオブジェクトのx座標を取得したいのですが、どのようにすればいいのかわからなくて困っています。 NSString *myStr=[NSString stringWithFormat:@"%d",myButton.x]; NSLog(@"%@", myStr); のように試してみたのですが、ビルドエラーでした。 初歩的なことで申し訳ありませんがよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

xcodeは補完機能があるから そこから辿ると良いんじゃないかな。 myButtonが何のclassだか判らないけどUIButtonだとしたらUIViewと同じでviewのframeプロパティから取り出せるよ。 http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/frame

umioyo
質問者

お礼

ありがとうございます。 勉強してみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.3

> いきなりiPhoneのアプリを作ろうとしているのが間違いなんでしょうか。 そうです。 もうひとつアドバイスするなら、あなたが勉強のために読んでいる本は、いずれもC言語を習得済みであることが条件になっているのではありませんか?Objective-Cは、C言語をオブジェクト指向で拡張したものなので、iPhoneアプリの開発を、いちから始めるとなると、C 言語の勉強から始めることになります。ほとんどのiPhoneアプリ開発の入門書は、C言語の勉強については、それようの入門書を読んでね、ということで、はしょっているものがほとんどです。 C言語はどのくらいわかりますか?すくなくとも構造体がわかっていれば、ビューの座標は、構造体(CGRect)で表されていることが理解でき、それが理解できていれば、ビューの座標から X値を取得することは、イロハのイにすぎません。 ご自身で、C言語がよくわかっていないという自覚が、もりおありなら、まずC言語の入門書から始めましょう。

umioyo
質問者

お礼

ありがとうございました。 基本から勉強してみます。

全文を見る
すると、全ての回答が全文表示されます。
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

「リファレンスを読め」としかお答えできません。 自動車教習所に通って、まだ仮免をとっていない人から、近くのコンビニまで車を運転して、買い物したい、といわれて、道順を教える人はいません。「ちゃんと免許を取ってからね」と回答するしかないです。 順々にObjective-C、iOS SDKの勉強をしていけば、ビューの位置を取得する方法は、基本事項として学ぶことになっています。あせらずに地道にひとつひとつステップを進めてください。 ひとつだけヒントをいっておくと、ビューのX座標を取得するのではなく、ビューの座標を取得し、座標のX値を取得するという、2ステップになります。

umioyo
質問者

お礼

ご回答ありがとうございます。 おっしゃることはわかるのですが、どこの教習所がいいのかわからなくて困っています。 何冊か書籍を購入してみたのですが、こうやればこうなる程度の書籍しかなく(良い書籍を選べていないだけなのかもしれませんが)基本がわかりません。 別な質問になってしまいますが、基本を学べるおすすめのサイトや書籍などご存じないでしょうか。 いきなりiPhoneのアプリを作ろうとしているのが間違いなんでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Objective-c ボタンの動的配置

    ボタンを以下のように、動的に配置していますが、画像がぼやけて表示されてしまいます。 調べると、座標の指定が整数値でない場合、この問題が起こったりするようなのですが、 整数値にしても奇麗に表示されません。。 どなたか、お分かりになる方教えて下さい。 myButton = [UIButton buttonWithType:UIButtonTypeCustom]; UIImage *myImage = [UIImage imageNamed:[NSString stringWithFormat:@"test.png"]]; [myButton setImage:myImage forState:UIControlStateNormal]; [myButton] setFrame:CGRectMake(100,100,200,200)]; [myButton addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside]; [scrollView addSubview:myButton ];

  • C(char *s1)の文字列をObjective-Cの文字列(NSS

    C(char *s1)の文字列をObjective-Cの文字列(NSString *s2)にするにはどうしたらよいのでしょうか? char s1[] = "abc"; NSString *s2 = [[NSString alloc] initWithUTF8String:s1];  // (A) NSLog(@"s2=[%s]", s2); 結果がabcかなと思っていましたが、読めない変な文字が表示されました。 (A)を NSString *s2 = [NSString stringWithFormat:@"%s", s1]; に変えても同じでした。 s1のC文字列は日本語を含まないアルファベットの文字列なのになぜ?と 困っています。 Objective-Cの初心者で申し訳ありません。

  • Objective-C 変数への代入エラー

    お世話になっております。 xCodeでiOSの開発をしておりますが、 以下のコンパイルエラーが発生してしまい解決方法が分かりません。 初歩的多所だと思いますが、ご教授お願い申し上げます。 xxxx.m @interface ViewController(){ @public NSString *hoge; } 略 -(void)hoge{ *hoge = [NSString stringWithFormat:@"%d",999]; } コンパイルエラー Assigning to 'NSString' from incompatible type 'id'

  • objective-c 描画処理について

    初心者ですが、iPhoneアプリを作成しています。 画像を並べてスクロールできるように配列で描画処理を行ないたいのですが、うまくいきません。 今のところのコードはこんな感じです↓ - (void)viewDidLoad { [super viewDidLoad]; NSMutableArray* imageList = [NSMutableArray array]; for (int i=1; i < 20; i++) { UIImage* image = [UIImage imageNamed: [NSString stringWithFormat:@"%d.jpg", i+1]]; [imageList addObject:image]; } MyImageView* imageView = [[MyImageView alloc] initWithImage:imageList]; scrollView.contentSize = imageView.bounds.size; [scrollView addSubview:imageView]; [imageView release]; } どなたか分かる方、教えて頂けますよう宜しくお願いします。

  • Objective-C ターゲットの取得方法

    iPhoneアプリを勉強しているところです。 ユーザー定義関数を作って、9個あるオブジェクトからそれぞれクリックされたときにそれが呼び出されるようにしたいのですが、どのオブジェクトから呼び出されたかターゲットを取得するにはどうすればよいでしょうか。 ActionScript3でいうところのe.target.nameみたいなものを探しています。 ちなみにオブジェクトはRoundRectButtonです。 よろしくお願いいたします。

  • xcodeでオブジェクト名に変数値を使えますか?

    Xcodeでiphoneアプリ勉強中の初心者です。 変数の値をオブジェクトの名前として利用する事は可能でしょうか? (過去の質問履歴を探しましたが、他の言語については掲載されていましたが、xcodeやobject-cに関しては類似する質問を見つける事が出来ませんでした。) 例えば、3つのラベルが配置されていて、ソース中(.mファイル)に以下の記述があったとします。 labeldayo1.text = @"1"; labeldayo2.text = @"2"; labeldayo3.text = @"3"; こののラベル部分を for (loop=1;loop<=3;loop=loop+1) { labeldayo(loop).text = [NSString stringWithFormat:@"%d",loop]; } みたいな感じで、変数の値をオブジェクトの名前として利用する事は可能でしょうか?? もし可能な場合、どのような記述方法があるのか、ご教授いただけたら幸いです。

  • objective-cで困っています教えてください

    objective-cをトライ&エラーで試しながら学習をしている初心者です。タッチした所を中心にまず100×100の正方形を表示し、その後スライダーで正方形の大きさを決めてから画像のトリミングをしたいのですが、正方形が表示されないのと、タッチした位置と切り取られる位置がずれています。上記の内容で行き詰っており、知恵をお借りしたいと思い投稿しました。宜しくお願いします。 ViewController.mの内容 #import "ViewController.h" @interface ViewController (){ // UILabel *label; // UIImageView *uv; //中心の位置 float v; // X座標 float x; // Y座標 float y; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //写真の表示 CGRect rect_uv = CGRectMake(0,20, 360, 360); UIImageView *imageView = [[UIImageView alloc] initWithFrame:rect_uv]; //画像のアスペクト比を維持しUIImageViewサイズに収まるように表示 imageView.contentMode = UIViewContentModeScaleAspectFit; UIImage *image = [UIImage imageNamed:@"hoge.png"]; [imageView setImage:image]; [self.view addSubview:imageView]; // UISliderのインスタンス化 CGRect rect_sd = CGRectMake(50, 400, 200, 10); UISlider *slider = [[UISlider alloc]initWithFrame:rect_sd]; // スライダーの最小値,最大値,値を設定 slider.minimumValue = 0; slider.maximumValue = 500; slider.value = 100; // スライドしている最中に値を調べられるようにする.デフォルトでYESだがサンプルのため slider.continuous = YES; // スライダーの値が変更されたときに呼ばれるメソッドを設定 [slider addTarget:self action:@selector(slider_ValueChanged:) forControlEvents:UIControlEventValueChanged]; // スライダーをビューに追加 [self.view addSubview:slider]; // ラベルの設置 CGRect rect_lb = CGRectMake(300, 400, 100, 30); label = [[UILabel alloc]initWithFrame:rect_lb]; [self.view addSubview:label]; // 標準ボタン例文 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btn.frame = CGRectMake(50, 450, 100, 30); [btn setTitle:@"切り取り" forState:UIControlStateNormal]; [btn addTarget:self action:@selector(trim:) forControlEvents:UIControlEventTouchDown]; [self.view addSubview:btn]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /** * スライダーの値が変更されたとき */ - (void)slider_ValueChanged:(id)sender { UISlider *slider = sender; // スライダーの値をログに記述 NSLog(@"スライダーの値:%f", slider.value); // ラベルのテキストを設定 //float v = slider.value; v = slider.value; label.text = [NSString stringWithFormat:@"%2.f",v]; //四角形を描画 CGContextRef context = UIGraphicsGetCurrentContext(); // コンテキストを取得 CGContextStrokeRect(context, CGRectMake(x,y,v,v)); // 四角形の描画 } /** * タッチされたとき */ - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 1.anyObjectメソッドでいずれか1つのタッチを取得 // 2.locationViewメソッドで対象となるビューのタッチした座標を取得 CGPoint p = [[touches anyObject] locationInView:self.view]; x = p.x; // X座標 y = p.y; // Y座標 NSLog(@"タップ開始 %f, %f", x, y); //四角形を描画 CGContextRef context = UIGraphicsGetCurrentContext(); // コンテキストを取得 CGContextStrokeRect(context, CGRectMake(x,y,100,100)); // 四角形の描画 } /** * 切り取りボタンが押されたとき呼ばれるtrimメソッド */ -(void)trim:(UIButton*)button{ // ここに何かの処理を記述する // (引数の button には呼び出し元のUIButtonオブジェクトが引き渡されてきます) // 切り抜き元となる画像を用意する。 //UIImage *srcImage = /* UIImagePickerなどから取得したUIImage */ UIImage *srcImage = [UIImage imageNamed:@"hoge.png"]; // 切り抜く位置を指定するCGRectを作成する。 CGRect trimArea = CGRectMake(x, y, v, v); // CoreGraphicsの機能を用いて、 // 切り抜いた画像を作成する。 CGImageRef srcImageRef = [srcImage CGImage]; CGImageRef trimmedImageRef = CGImageCreateWithImageInRect(srcImageRef, trimArea); UIImage *trimmedImage = [UIImage imageWithCGImage:trimmedImageRef]; // 画像表示例文 //UIImage *img = [UIImage imageNamed:@"hoge.png"]; UIImageView *iv = [[UIImageView alloc] initWithImage:trimmedImage]; [self.view addSubview:iv]; } @end

  • Objective-Cのメモリ管理について

    iPhoneのUIBarButtonItem(右上のボタン)を押すと、xamppのPHPで作ったwebサーバーにPOSTを送り、送ったPOSTの内容で異なるデータをiPhoneに返す仕組を作っていたら、Objective-Cのメモリ管理でつまづきました。 どうすれば以下のソースにあるNSString *strがメモリ解放されないかを知りたいです。 【ソース】 - (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data { //PHPのデータ char* p = (char*)[data bytes]; NSString *str = [[NSString alloc] initWithUTF8String:p]; NSLog(@"str_RETAIN:%d",[str retainCount]); ←問題の箇所 NSRange rng; rng = [str rangeOfString:@"比較したい文字列"]; if(rng.length > 0) ...以下、strに関係する部分はないので省略 } この時、NSStringでalloc,initWithUTF8Stringを呼び出した後のNSLogのretainCountは呼び出すたびに常に1が出るようにしたいのですが、なぜか0になったり1になったりしてしまいます。 コンソール画面で何度も試しましたが、0になったり1になったりするのに法則性がなく、最初0で次押すと1,1,1,0,1,1,0とか、最初1,0,1,0,0,1,1,1,1,1...など、乱数のような状況になってます。 なので、0になった場合は、セットした値が無くなってしまっていて、次の部分文字列の比較(rng = [str rangeOfString:@"比較したい文字列"];)の部分で正しい動作ができなくなってしまってます。 送られてくるPHPのデータ(char *)は特に問題なさそうです。 後、サーバーに接続出来ない場合は、別の処理でエラー判定が出来るようになっているので、最初からデータがないという事はないです。 分かる方いましたら、ご回答お願いします。

  • Objective-C ボタンを動かすには

    Objective-Cはまったくの初心者で、iPhone用のアプリを作るのに書籍を見ながらサンプルをいじっています。 画像をタップしたらその画像自体が動くようなものを作りたいのですが、 RoundRectButtonを1個だけ配置して 【imageTestViewContollorer.h】 @interface imageTest1ViewController : UIViewController { IBOutlet UIButton *myButton; } -(IBAction)tapBtn; @end 【imageTestViewContollorer.m】 @implementation imageTestViewController -(IBAction)tapBtn{ myButton.center=CGPointMake(50,50); [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:2]; myButton.center=CGPointMake(160, 240); [UIView commitAnimations]; } としてみましたが、コンパイルエラーなどはありませんでしたが、ボタンを押しても何も起こりませんでした。 IBOutlet UIButtonが臭いような気もしているのですが、UIImageViewにするとRoundRectButtonと線を繋げなくなりますし、どう直してよいか見当もつかず困っています。 画像がタップされたら動く、みたいなものをそもそもRoundRectButtonに画像を割り当てた方がいいのかImageViewにタップされた場合の処理を割り当てた方がいいのかどうかもよくわかりません。 よろしくお願いいたします。

  • [再]objective-c 描画処理について

    前回質問させて頂きましたが、まだ抜け出せていないので教えて下さい。 ↓↓↓ -------------------------------------------------------------------------------------------------------------- 初心者ですが、iPhoneアプリを作成しています。 画像を並べてスクロールできるように配列で描画処理を行ないたいのですが、うまくいきません。 今のところのコードはこんな感じです↓ - (void)viewDidLoad { [super viewDidLoad]; NSMutableArray* imageList = [NSMutableArray array]; for (int i=1; i < 20; i++) { UIImage* image = [UIImage imageNamed: [NSString stringWithFormat:@"%d.jpg", i+1]]; [imageList addObject:image]; } MyImageView* imageView = [[MyImageView alloc] initWithImage:imageList]; scrollView.contentSize = imageView.bounds.size; [scrollView addSubview:imageView]; [imageView release]; } どなたか分かる方、教えて頂けますよう宜しくお願いします。 -------------------------------------------------------------------------------------------------------------- ↓ NSArray *initWithImage;と引数で渡しましたが、 「MyImageView* imageView = [[MyImageView alloc] initWithImage:imageList];」 の部分で、「Incompatible pointer sending 'NSMutableArray *' to parameter of type 'UIImage *'」とエラー表示され、実行すると、 「Tread1 : Program received signal: "SIGABRT"」で落ちてしまいます。

このQ&Aのポイント
  • オイルエステやもみほぐし店の面接で落とされる人とは、施術を受けに行ったときに筋肉がカチカチに固すぎると判断される場合があります。
  • 自分の体と向き合って学習する意欲を示しても、無理だと判断されてしまうこともあるでしょう。
  • もみほぐし店の仕事を副業でしたい場合、事前に経験者のアドバイスを聞くことが重要です。
回答を見る