1、创建一个Empty Application工程,命名为:MultiView-Navigation,如下图
2、选中工程中的Group MultiView-Tab,然后按住CMD(Windows键)+N,新建视图控制器PageControlViewController,如下图
3、依照上步操作,新建视图控制器WelcomeViewController、FeatureListViewController
4、万事俱备,开始编写代码,首先修改AppDelegate,AppDelegate.h如下:
其实现多视图的原理是scrollView的宽度为WelcomeViewController、FeatureListViewController中View的宽度之和,并且WelcomeViewController、FeatureListViewController的View都是作为scrollView的子视图。当第一页被选中时显示WelcomeViewController的view,但是第二页被选中时显示FeatureListViewController的view。
7、编译、运行,效果如下:
点击下载本文源代码
2、选中工程中的Group MultiView-Tab,然后按住CMD(Windows键)+N,新建视图控制器PageControlViewController,如下图
3、依照上步操作,新建视图控制器WelcomeViewController、FeatureListViewController
4、万事俱备,开始编写代码,首先修改AppDelegate,AppDelegate.h如下:
// // AppDelegate.h // MultiView-PageControl // // Created by Zhang Yanguang on 12-11-21. // Copyright (c) 2012年 MyCompanyName. All rights reserved. // #importAppDelegate.m主要修改didFinishLaunchingWithOptions方法,如下:#import "PageControlViewController.h" #import "WelcomeViewController.h" @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) PageControlViewController *pageControlViewController; @end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.pageControlViewController = [[PageControlViewController alloc]initWithNibName:@"PageControlViewController" bundle:nil]; //设置rootViewController self.window.rootViewController = pageControlViewController; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; }5、视图控制器WelcomeViewController、FeatureListViewController仅仅修改了源代码文件,设置了一下背景色,如下:
@implementation WelcomeViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization self.view.backgroundColor = [UIColor redColor]; } return self; } @implementation FeatureListViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization self.view.backgroundColor = [UIColor greenColor]; } return self; }6、主要工作在PageControlViewController中,PageControlViewController.h如下:
// // PageControlViewController.h // MultiView-PageControl // // Created by Zhang Yanguang on 12-11-21. // Copyright (c) 2012年 MyCompanyName. All rights reserved. // #importPageControlViewController.m如下:#import "WelcomeViewController.h" #import "FeatureListViewController.h" @interface PageControlViewController : UIViewController{ BOOL pageControlUsed;//用于区分是点击PageControll换页还是通过滚动scrollView换页 } //添加代码 @property (strong, nonatomic) UIPageControl *pageControl; @property (strong, nonatomic) UIScrollView *scrollView; @property (strong, nonatomic) WelcomeViewController *welComeViewController; @property (strong, nonatomic) FeatureListViewController *featureListViewController; -(void)pageControlChanged:(id)sender; @end
// // PageControlViewController.m // MultiView-PageControl // // Created by Zhang Yanguang on 12-11-21. // Copyright (c) 2012年 MyCompanyName. All rights reserved. // #import "PageControlViewController.h" @interface PageControlViewController () @end @implementation PageControlViewController @synthesize pageControl; @synthesize scrollView; @synthesize welComeViewController; @synthesize featureListViewController; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { } return self; } - (void)viewDidLoad { [super viewDidLoad]; CGRect frame = [UIScreen mainScreen].applicationFrame; int width = frame.size.width; int height = frame.size.height; frame = CGRectMake(0, 0, width, height); //初始化scrollView scrollView = [[UIScrollView alloc]initWithFrame:frame]; scrollView.showsVerticalScrollIndicator = NO; scrollView.showsHorizontalScrollIndicator = YES; scrollView.pagingEnabled = YES; scrollView.contentSize = CGSizeMake(width*2, height);//scrollView内存大小 scrollView.scrollsToTop = NO; //设置代理 scrollView.delegate = self; int pageControlHeight = 50; NSLog(@"width=%d,height=%d",width,height); //初始化pageControl pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, height-pageControlHeight, width, pageControlHeight)]; //pageControl设定 pageControl.numberOfPages = 2; //2页 pageControl.currentPage = 0; pageControl.hidesForSinglePage = NO; pageControl.backgroundColor = [UIColor blackColor]; [pageControl addTarget:self action:@selector(pageControlChanged:) forControlEvents:UIControlEventValueChanged]; //初始化welComeViewController、featureListViewController welComeViewController = [[WelcomeViewController alloc]initWithNibName:@"WelcomeViewController" bundle:nil]; featureListViewController = [[FeatureListViewController alloc]initWithNibName:@"FeatureListViewController" bundle:nil]; //设定welComeViewController的位置 frame = scrollView.frame; frame.origin.y = 0; welComeViewController.view.frame = frame; //设定featureListViewController的位置 frame.origin.x = frame.size.width; featureListViewController.view.frame = frame; //将welComeViewController、featureListViewController加入到scrollView中 [scrollView addSubview:welComeViewController.view]; [scrollView addSubview:featureListViewController.view]; //scrollView设置为黑色背景 scrollView.backgroundColor = [UIColor blackColor]; [self.view insertSubview:scrollView atIndex:0]; //将pageControl的atIndex设置为1,pageControl的view在scrollView的view的上层 [self.view insertSubview:pageControl atIndex:1]; } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. pageControl = nil; scrollView = nil; welComeViewController = nil; featureListViewController = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } //点击pageControl上的白色点触发的事件 -(void)pageControlChanged:(id)sender{ int page = pageControl.currentPage; NSLog(@"page=%d",page); CGRect frame = scrollView.frame; frame.origin.x = frame.size.width*page; frame.origin.y = 0; [scrollView scrollRectToVisible:frame animated:YES]; pageControlUsed = YES; //用户通过点击Page Control换页时将其设置为YES } #pragma pageControl methods - (void)scrollViewDidScroll:(UIScrollView *)sender{ NSLog(@"scrollViewDidScroll..."); if(pageControlUsed){//如果用户通过点击Page Control换页,则不做处理 return; } CGFloat pageWidth = scrollView.frame.size.width; NSLog(@"pageWidth=%.2f,scrollView.contentOffset.x=%.2f",pageWidth,scrollView.contentOffset.x); NSLog(@"@ %.2f,%2.f",floor(-0.5),floor(-0.6)); //计算滚到哪页 int page = floor((scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1; pageControl.currentPage = page; } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ pageControlUsed = NO;//滚动结束后将pageControlUsed重置为NO } @endUIPageControl由一系列小圆点组成,每个点代表一页,白色的点代表当前选中的页。
其实现多视图的原理是scrollView的宽度为WelcomeViewController、FeatureListViewController中View的宽度之和,并且WelcomeViewController、FeatureListViewController的View都是作为scrollView的子视图。当第一页被选中时显示WelcomeViewController的view,但是第二页被选中时显示FeatureListViewController的view。
7、编译、运行,效果如下:
点击下载本文源代码
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2300
- 用户1336
- 访客10861715
每日一句
True success inspires others to act.
真正的成功是激励他人行动。
真正的成功是激励他人行动。
语法错误: 意外的令牌“标识符”
全面理解Gradle - 定义Task
Motrix全能下载工具 (支持 BT / 磁力链 / 百度网盘)
谷歌Pixel正在开始起飞?
获取ElementUI Table排序后的数据
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is
亲测!虚拟机VirtualBox安装MAC OS 10.12图文教程
华为手机app闪退重启界面清空log日志问题
android ndk开发之asm/page.h: not found
手机屏幕碎了怎么备份操作?
免ROOT实现模拟点击任意位置
新手必看修改DSDT教程
thinkpad t470p装黑苹果系统10.13.2
新会员