iphoneの開発をやっている超初心者です。


今までVBはやったことありますが、XCODEとイメージが異なり
だいぶはまっています。

やりたいことは、オブジェクトの高さを変えたいだけで
VBのような高さのプロパティ(hight)があるようですが
(sizeタブのsize&positionのHですよね?)
コードの記載の仕方がわからず困っています。

質問もわかりにくいと思いますが、ご教授お願い致します

また、メソッドやプロパティ(VB的な表現で適切かわかりませんが)
がわかるようなわかりやすいリファレンスの本やサイトも
ありましたら教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/05/12 23:41:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:australiagc No.3

回答回数467ベストアンサー獲得回数90

ポイント100pt

コメント欄が未開放だったので、大した内容ではありませんが回答欄で再度失礼致します。


イベント時にサイズの変更をするのであれば、前記どおりUIオブジェクトが設置されている、UIViewのframeプロパティを変更すればOKです。

x座標、y座標、幅、高さを個別に変更したいのであれば、

myView.frame.origin.x = [x座標];

myView.frame.origin.y = [y座標];

myView.frame.size.width = [幅];

myView.frame.size.height = [高さ];

もし一括で座標とサイズを変更するのであれば、

CGRect newFrame = CGRectMake([x座標], [y座標], [幅], [高さ]);

myView.frame = newFrame;

*myViewは、サイズを変更したいUIオブジェクトを含むUIViewです。


例えば、ボタンがクリックされたら画像の入ったmyViewのサイズを倍にするというコードなら、

  • (IBAction) buttonClick: (id) sender {

CGRect newFrame = CGRectMake(

myView.frame.origin.x,

myView.frame.origin.y,

myView.frame.size.width*2,

myView.frameoldFrame.size.height*2);

myView.frame = newFrame;

}

といった感じです。

* myViewには予め何らかのUIImageオブジェクトが含まれていると仮定する。

* myViewはパブリックプロパティとして定義されていると仮定する。

* buttonClickはパブリックメソッドであり、IB上にあるボタンのクリックイベントにリンク済みであると仮定する。


こういったUIViewの変更に関するサンプルであれば、IBを使っていないものがほとんどですが、

iPhone開発者エリアにある公式サンプルにもいくつかあったような・・・。

例えば思い出せるものだと、3つの違う色の正方形を指で動かして、重ねたり離したりするやつ。

http://developer.apple.com/iphone/library/samplecode/Touches/Int...

Classes/MyView.m

// Handles the start of a touch

  • (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

...

if (firstPieceView.center.x == secondPieceView.center.x)

secondPieceView.center = CGPointMake(firstPieceView.center.x - 50, firstPieceView.center.y - 50);

...

}

このサンプルの上記タッチイベントで変更されているのはcentreプロパティ(中心の座標)ですが、

代わりにここでframeプロパティを変更すれば左上の座標とサイズが変更できるわけです。


ただ、僕が説明しているのはUI系のオブジェクトを使った場合になります。

もし本格的にOpenGLなどを使ってCGを作成するのであれば、

iPhoneではやったことがないのでちょっと僕には分かりませんね・・・。

id:knary

非常にわかりやすい説明ありがとうございます。

時間がなくまだ試していませんができそうな気がしました。

2010/05/12 23:40:25

その他の回答2件)

id:goobee No.1

回答回数88ベストアンサー獲得回数12

Interface Builderを用いた編集だとオブジェクトをドラッグするだけだと思うのですが

実際に触ったことがないので間違ってるかもしれません。

iPhoneアプリ入門 (View編)

https://sites.google.com/a/gclue.jp/iphone-app-docs/iphoneapurin...


iPhone SDK 日本語ドキュメント

https://developer.apple.com/jp/iphone/library/japanese.html

id:knary

回答ありがとうございます。

質問がわかりにくくすいません。

コードの記載がわからないだけです。

たしかに全てのドキュメントを見れば解決できるかもしれませんが

質問に対しての回答になっていません。

2010/05/09 07:59:22
id:australiagc No.2

回答回数467ベストアンサー獲得回数90

ポイント100pt

直接の回答にならないかも知れないので、ポイント0で結構です。


goobeeさんが仰るように、IBを使うのであれば(むしろ今後アップデートを出す予定があるのであれば使うべき)マウス操作で変更できますよ。

サイズの変更などをランタイムで行う場合のみ、コード上でUIObjectのframeプロパティにアクセスすることになると思います。

基本的に、CocoaのUIObjectはUIViewの中に設置することで、そのframeプロパティを通して座標とサイズを定義できます。例えば、


myView.frame.origin.x = [x座標];

myView.frame.origin.y = [y座標];

myView.frame.size.width = [幅];

myView.frame.size.height = [高さ];


もしくは、

CGRect newFrame = CGRectMake([x座標], [y座標], [幅], [高さ]);

myView.frame = newFrame;

省略するなら、

myView.frame = CGRectMake([x座標], [y座標], [幅], [高さ]);


http://developer.apple.com/iphone/library/documentation/UIKit/Re...

http://dosiphone.com/iphone/tag/cgrect/

URLは適当に引っ張ってきたものです。

質問があればコメント欄を空けておいて下さい。

答えられる範囲でお教えしますので。

id:knary

回答ありがとうございました。

どうやらIBを使用せずに全てコーディングするように伝わってしまったようですね。

すいませんでした。

やりたいことは、アプリが動作している状態でオブジェクトのサイズを変えたいということです。

なのでIBでレイアウトを作成し、アプリ起動中のイベント(Action)でサイズを変えるように

できれば良いと思いますが。。。できますか?

例えば、ボタンをIBで2つ(AとB)を配置して

アプリ起動中にAボタンを押下すると、Bのボタンの高さが変わるような

できればサンプルソースとかがあれば助かります。

2010/05/10 22:47:05
id:australiagc No.3

回答回数467ベストアンサー獲得回数90ここでベストアンサー

ポイント100pt

コメント欄が未開放だったので、大した内容ではありませんが回答欄で再度失礼致します。


イベント時にサイズの変更をするのであれば、前記どおりUIオブジェクトが設置されている、UIViewのframeプロパティを変更すればOKです。

x座標、y座標、幅、高さを個別に変更したいのであれば、

myView.frame.origin.x = [x座標];

myView.frame.origin.y = [y座標];

myView.frame.size.width = [幅];

myView.frame.size.height = [高さ];

もし一括で座標とサイズを変更するのであれば、

CGRect newFrame = CGRectMake([x座標], [y座標], [幅], [高さ]);

myView.frame = newFrame;

*myViewは、サイズを変更したいUIオブジェクトを含むUIViewです。


例えば、ボタンがクリックされたら画像の入ったmyViewのサイズを倍にするというコードなら、

  • (IBAction) buttonClick: (id) sender {

CGRect newFrame = CGRectMake(

myView.frame.origin.x,

myView.frame.origin.y,

myView.frame.size.width*2,

myView.frameoldFrame.size.height*2);

myView.frame = newFrame;

}

といった感じです。

* myViewには予め何らかのUIImageオブジェクトが含まれていると仮定する。

* myViewはパブリックプロパティとして定義されていると仮定する。

* buttonClickはパブリックメソッドであり、IB上にあるボタンのクリックイベントにリンク済みであると仮定する。


こういったUIViewの変更に関するサンプルであれば、IBを使っていないものがほとんどですが、

iPhone開発者エリアにある公式サンプルにもいくつかあったような・・・。

例えば思い出せるものだと、3つの違う色の正方形を指で動かして、重ねたり離したりするやつ。

http://developer.apple.com/iphone/library/samplecode/Touches/Int...

Classes/MyView.m

// Handles the start of a touch

  • (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

...

if (firstPieceView.center.x == secondPieceView.center.x)

secondPieceView.center = CGPointMake(firstPieceView.center.x - 50, firstPieceView.center.y - 50);

...

}

このサンプルの上記タッチイベントで変更されているのはcentreプロパティ(中心の座標)ですが、

代わりにここでframeプロパティを変更すれば左上の座標とサイズが変更できるわけです。


ただ、僕が説明しているのはUI系のオブジェクトを使った場合になります。

もし本格的にOpenGLなどを使ってCGを作成するのであれば、

iPhoneではやったことがないのでちょっと僕には分かりませんね・・・。

id:knary

非常にわかりやすい説明ありがとうございます。

時間がなくまだ試していませんができそうな気がしました。

2010/05/12 23:40:25
  • id:australiagc
    不完全な回答なのに、いるかありがとうございます。

    XCodeのUIをなんでもかんでもとりあえずViewに入れなくてはいけないという概念は、
    最新のVBやVC#のModelの概念とは異なるものなのではじめは苦労すると思います。

    IBも実はXML的なファイルとして保存されるんですけどね・・・
    Modelのように普通にテキストとして開いて細部調節できるような構造にはなっていないので。

    もし上手くいかなければ、コメント欄でまた質問してください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません