イナヅマTVログ

iPhone SDK, Flip : 向きの変更

| 0件のコメント

iPhone デベロッパーズ クックブック レシピ 2-2。
コードをヘッダー、ソースと分けてみた。

プロジェクト名:RotateView

.xib, .nib ファイルを削除。

RotateViewAppDelegate.h

#import <UIKit/UIKit.h>
 
@class RotateViewViewController;
 
@interface RotateViewAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    RotateViewViewController *viewController;
}
 
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet RotateViewViewController *viewController;
 
@end

RotateViewAppDelegate.m

#import "RotateViewAppDelegate.h"
#import "RotateViewViewController.h"
 
@implementation RotateViewAppDelegate
 
@synthesize window;
@synthesize viewController;
 
- (void)applicationDidFinishLaunching:(UIApplication *)application {    
	window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
	viewController = [[RotateViewViewController alloc] init];    
	[window addSubview:[ viewController view]];
    [window makeKeyAndVisible];
}
 
- (void)dealloc {
    [viewController release];
    [window release];
    [super dealloc];
}
 
@end

RotateViewViewController.h

#import <UIKit/UIKit.h>
 
@interface RotateViewViewController : UIViewController {
}
 
@end

RotateViewViewController.m

#import "RotateViewViewController.h"
 
@implementation RotateViewViewController
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration  {
 
	CGRect apprect;
	apprect.origin = CGPointMake(0.0f, 0.0f);
 
	if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight))
		apprect.size = CGSizeMake(480.0f, 300.0f);
	else
		apprect.size = CGSizeMake(320.0f, 460.0f);
 
	// Iterate through the subviews and inset each item
	float offset = 32.0f;
	for (UIView *subview in [self.view subviews])	
	{
		CGRect frame = CGRectInset(apprect, offset, offset);
		[subview setFrame:frame];
		offset += 32.0f;
	}
}
 
- (void)loadView
{
	// Create the main view
	UIView *contentView = [[UIView alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];
	contentView.backgroundColor = [UIColor whiteColor];
	self.view = contentView;
	 [contentView release];
 
	// Get the view bounds as our starting point
	CGRect apprect = [contentView bounds];
 
	// Add each inset subview
	UIView *subview = [[UIView alloc] initWithFrame:CGRectInset(apprect, 32.0f, 32.0f)];
	subview.backgroundColor = [UIColor lightGrayColor];
	[contentView addSubview:subview];
	[subview release];
 
	subview = [[UIView alloc] initWithFrame:CGRectInset(apprect, 64.0f, 64.0f)];
	subview.backgroundColor = [UIColor darkGrayColor];
	[contentView addSubview:subview];
	[subview release];
 
	subview = [[UIView alloc] initWithFrame:CGRectInset(apprect, 96.0f, 96.0f)];
	subview.backgroundColor = [UIColor blackColor];
	[contentView addSubview:subview];
	[subview release];
}
 
// Allow the view to respond to all iPhone Orientation changes
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
	return YES;
}
 
 
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}
 
 
- (void)dealloc {
    [super dealloc];
}
 
@end

main.m

#import <UIKit/UIKit.h>
 
int main(int argc, char *argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"RotateViewAppDelegate");
    [pool release];
    return retVal;
}

分からないことだらけ。
#import は PHP の require_once() と同じように働くらしい。
SDKの説明に「2回以上インクルードしない」と書いてあった。

コメントを残す

必須欄は * がついています


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください