スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

複数viewをスクロールviewで切り替える方法の手順

複数viewをScrollViewで切り替える方法にすごくつまづいたのでメモ。
参考サイトは下記。

iPhone アプリ UIScrollView pageControl の使い方

ViewBaseで新規作成後、SurfComViewControllerで作成。

SurfComViewController.h

#import

@interface SurfComViewController : UIViewController {
IBOutlet UIScrollView *scrollView;
IBOutlet UIPageControl *pageControl;
}

@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) UIPageControl *pageControl;

- (void)loadScrollViewWithPage:(int)page;
- (IBAction)changePage:(id)sender;

@end


そしたら、SurfComViewController.xibで、UIScrollViewとPageControllをそれぞれ、scrollViewアウトレットとpageControlアウトレットに接続。

PageControlのValueChangeとchangePageアクションを接続。

SurfComViewController.m

#import "SurfComViewController.h"
#import "Controller.h"

@implementation SurfComViewController
@synthesize scrollView;
@synthesize pageControl;

- (void)loadView {
[super loadView];

scrollView.pagingEnabled = YES;
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 3, scrollView.frame.size.height);
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.delegate = self;

pageControl.numberOfPages = 3;
pageControl.currentPage = 0;

[self loadScrollViewWithPage:0];
[self loadScrollViewWithPage:1];
}

- (IBAction)changePage:(id)sender {
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * pageControl.currentPage;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:YES];
}

- (void)scrollViewDidScroll:(UIScrollView *)sender {
CGFloat pageWidth = scrollView.frame.size.width;
pageControl.currentPage = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
}

- (void)loadScrollViewWithPage:(int)page {
if (page < 0) return;
if (page >= 3) return;
NSLog(@"page=%d", page);
Controller *controller = [[Controller alloc] init];
controller.controllerNumber = page;

UIView *choiceView = [controller loadViewController];

CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
//NSLog(@"%d: %f", page, frame.origin.x);

choiceView.frame = frame;

[scrollView addSubview:choiceView];
[choiceView release];

}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {
[super dealloc];
}

@end



ViewをコントロールするControllerクラスを作成
■作成方法
 1.xcodeのグループとファイルのclassesで右クリック→追加→新規ファイルで、Objective-c classを選択
 2.クラス名はController (別でもいいけど)

Controller.h

#import


@interface Controller : UIView {
int controllerNumber;
}
@property (readwrite) int controllerNumber;

- (UIView *) loadViewController;
@end


Controller.m

#import "Controller.h"
#import "TestView1.h"
#import "TestView2.h"

@implementation Controller
@synthesize controllerNumber;

- (UIView *) loadViewController {
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(15.0f, 10.0f, 290.0f, 310.0f)];
NSLog(@"%@", view);
NSLog(@"num=%d", self.controllerNumber);

switch (self.controllerNumber) {
case 0: {
TestView1 *view1 = [[TestView1 alloc]
initWithNibName:@"TestView1"
bundle:nil];

view = view1.view;
break;
}
case 1: {
view = [[TestView2 alloc]
initWithFrame:CGRectMake(0, 0, 500, 500)];

break;
}
case 2:

break;
default:
break;
}

NSLog(@"view=%@", view);

return view;
}

- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
// Initialization code
}
return self;
}

- (void)dealloc {
[super dealloc];
}

@end


あとは、表示させるviewを作成する。

■パターン1。UIViewController subclassで作る場合。(xibで配置とか出来る)
 1.xcodeのグループとファイルのclassesで右クリック→追加→新規ファイルで、Cocoa Touch classのUIViewController subclassを選択
 2.クラス名はTestView1 (別でもいいけど)
 3.xcodeのグループとファイルのclassesで右クリック→追加→新規ファイルで、User interfaceのView XIBを選択
 4.ファイル名は、TestView1とかで。
 5.xibをダブルクリックして、Interface Builderを開く
 6.View Mode(File's OwnerとかFirst Responderとかあるとこ)のViewをダブルクリックして、とりあえず色とかを赤とかに変えておく。
 7.File's OwnerでviewとViewを接続
 8.インスタンス化する。(Controller.mのswitchの中の0の時がやり方)


■パターン2。Objective-c classで作る場合。
 1.xcodeのグループとファイルのclassesで右クリック→追加→新規ファイルで、Objective-c classを選択
 2.ファイル名はTestView2とか。
 3.initWithFrameメソッドとかでself.backgroundColor = [UIColor whiteColor];を入れて背景色変える。
 4.インスタンス化する。(Controller.mのswitchの中の1の時がやり方)



これやるのに、3日間くらいかかった~
ちょっとだけ、iPhoneアプリ作成で進歩した気分!
スポンサーサイト

トラックバック

コメント

コメントを残す

Secret


プロフィール

U2K

Author:U2K
いろいろプログラムに関しての覚え書きをちょくちょくと書いていきます。

オススメ










オススメ

忍者AdMax

u2k on Twitter

最近の記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。