libro
www.tuyano.com
初心者のためのiphone/ipadプログラミング入門

コンポーネントの主な属性 (3/4)

作成:2011-03-28 09:07
更新:2011-03-28 09:13

■位置と大きさ――CGRect, CGPoint, CGRize

位置と大きさに関する属性を扱う場合には、これらの値の構造について理解しておく必要があります。位置と大きさは、「CGRect」「CGPoint」「CGSize」という3つの構造体の組汗によって構成されているからです。これらは、それぞれ以下のような役割を果たします。

CGPoint
位置を示すためのものです。「x」「y」といった要素を持っており、これらから縦横の位置の値を得ることができます。構造体の作成は、「CGPointMake」という以下のような関数を利用します(引数はそれぞれCGFloat値です)。
CGPointMake( 横位置 , 縦位置 );

CGSize
大きさを示すためのものです。「width」「height」といった要素を持っています。これも構造体作成は「CGSieMake」関数を使います。(引数はやはりGCFloat値)
CGSizeMake( 横幅 , 縦幅 );

CGRect
領域を示すためのものです。要素として、位置を示す「origin」、大きさを示す「size」というものを持っており、これらはそれぞれCGPointCGSize構造体の値となっています。またCGRectは、「CGRectMake」関数を使い以下のように作成することができます(引数はCGFloat値)
CGRectMake( 横位置 , 縦位置 , 横幅 , 縦幅 );

コンポーネントの配置エリアは、「frame」という属性として用意されています。これは、CGRect値として設定されます。ややこしいのは、このCGRectは、CGPointCGSizeの組合わせによって値が構成されている、ということでしょう。

したがって、frameプロパティから取り出したCGRectから細かな値を取り出すには、その中のCGPointCGSizeから更に値を取り出す、ということをしないといけないのです。

下に、コンポーネントの表示エリアを操作する簡単なサンプルをあげておきます。UILabelUIButtonが配置されている状態で、ボタンをクリックすると、表示されているULabelの表示エリアが少しずつ変化していきます。

ここでは、[label1 frame]CGRect値を取得した後、CGRectMake関数で新たに設定するCGRect値を作成してからsetFrame:で設定をしています。CGRectMake関数では、取り出したCGRectから位置や大きさの値を取り出し、それに加算減算して新しい値を設定しています。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※MyIAppViewController.h

#import <UIKit/UIKit.h>

@interface MyIAppViewController : UIViewController {
	UILabel * label1;
	UIButton * button1;
}

@property (nonatomic, retain) IBOutlet UILabel * label1;
@property (nonatomic, retain) IBOutlet 
		UIButton * button1;

- (IBAction)button1Action:(id)sender;

@end


※MyIAppViewController.m

@implementation MyIAppViewController

@dynamic label1;
@dynamic button1;

- (IBAction)button1Action:(id)sender {
	CGRect r = [label1 frame];
	CGRect r2 = CGRectMake(r.origin.x + 10, 
			r.origin.y + 10,
			r.size.width - 10, 
			r.size.height + 10);
	[label1 setFrame:r2];
}

……中略……

@end

※関連コンテンツ

「初心者のためのiphone/ipadプログラミング入門」に戻る