iPhone开发【十一】多视图技术总结之四:Page Control

本文介绍如何使用PageControl和UIScrollView实现iOS应用中的多视图欢迎界面。通过具体步骤和代码示例展示了从创建项目到实现多视图切换的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明出处,原文网址:http://blog.youkuaiyun.com/m_changgong/article/details/8209461作者:张燕广

第一次使用某个App时,一般会有欢迎界面,向右滑动屏幕会出现该App的新增功能或功能介绍或使用帮助相关的界面。通过PageControl可以实现该效果。

实现的功能:通过PageControl,实现多视图切换。

关键词:多视图 PageControl UIPageContrller

1、创建一个Empty Application工程,命名为:MultiView-Navigation,如下图


2、选中工程中的Group MultiView-Tab,然后按住CMD(Windows键)+N,新建视图控制器PageControlViewController,如下图


3、依照上步操作,新建视图控制器WelcomeViewController、FeatureListViewController

4、万事俱备,开始编写代码,首先修改AppDelegate,AppDelegate.h如下:

[cpp]  view plain copy
  1. //  
  2. //  AppDelegate.h  
  3. //  MultiView-PageControl  
  4. //  
  5. //  Created by Zhang Yanguang on 12-11-21.  
  6. //  Copyright (c) 2012年 MyCompanyName. All rights reserved.  
  7. //  
  8.   
  9. #import <UIKit/UIKit.h>  
  10. #import "PageControlViewController.h"  
  11. #import "WelcomeViewController.h"  
  12. @interface AppDelegate : UIResponder <UIApplicationDelegate>  
  13.   
  14. @property (strong, nonatomic) UIWindow *window;  
  15. @property (strong, nonatomic) PageControlViewController *pageControlViewController;  
  16.   
  17. @end  

AppDelegate.m主要修改didFinishLaunchingWithOptions方法,如下:

[cpp]  view plain copy
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
  4.     // Override point for customization after application launch.  
  5.     self.pageControlViewController = [[PageControlViewController alloc]initWithNibName:@"PageControlViewController" bundle:nil];  
  6.     //设置rootViewController  
  7.     self.window.rootViewController = pageControlViewController;  
  8.     self.window.backgroundColor = [UIColor whiteColor];  
  9.     [self.window makeKeyAndVisible];  
  10.     return YES;  
  11. }  
5、视图控制器WelcomeViewController、FeatureListViewController仅仅修改了源代码文件,设置了一下背景色,如下:

[cpp]  view plain copy
  1. @implementation WelcomeViewController  
  2.   
  3. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
  4. {  
  5.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  6.     if (self) {  
  7.         // Custom initialization  
  8.         self.view.backgroundColor = [UIColor redColor];  
  9.     }  
  10.     return self;  
  11. }  

[cpp]  view plain copy
  1. @implementation FeatureListViewController  
  2.   
  3. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
  4. {  
  5.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  6.     if (self) {  
  7.         // Custom initialization  
  8.         self.view.backgroundColor = [UIColor greenColor];  
  9.     }  
  10.     return self;  
  11. }  
6、主要工作在PageControlViewController中,PageControlViewController .h如下:

[cpp]  view plain copy
  1. //  
  2. //  PageControlViewController.h  
  3. //  MultiView-PageControl  
  4. //  
  5. //  Created by Zhang Yanguang on 12-11-21.  
  6. //  Copyright (c) 2012年 MyCompanyName. All rights reserved.  
  7. //  
  8.   
  9. #import <UIKit/UIKit.h>  
  10. #import "WelcomeViewController.h"  
  11. #import "FeatureListViewController.h"  
  12. @interface PageControlViewController : UIViewController<UIScrollViewDelegate>{  
  13.     BOOL pageControlUsed;//用于区分是点击PageControll换页还是通过滚动scrollView换页  
  14. }  
  15.   
  16. //添加代码  
  17. @property (strong, nonatomic) UIPageControl *pageControl;  
  18. @property (strong, nonatomic) UIScrollView *scrollView;  
  19. @property (strong, nonatomic) WelcomeViewController *welComeViewController;  
  20. @property (strong, nonatomic) FeatureListViewController *featureListViewController;  
  21.   
  22. -(void)pageControlChanged:(id)sender;  
  23. @end  

PageControlViewController.m如下:

[cpp]  view plain copy
  1. //  
  2. //  PageControlViewController.m  
  3. //  MultiView-PageControl  
  4. //  
  5. //  Created by Zhang Yanguang on 12-11-21.  
  6. //  Copyright (c) 2012年 MyCompanyName. All rights reserved.  
  7. //  
  8.   
  9. #import "PageControlViewController.h"  
  10.   
  11. @interface PageControlViewController ()  
  12.   
  13. @end  
  14.   
  15. @implementation PageControlViewController  
  16. @synthesize pageControl;  
  17. @synthesize scrollView;  
  18. @synthesize welComeViewController;  
  19. @synthesize featureListViewController;  
  20.   
  21. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
  22. {  
  23.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  24.     if (self) {  
  25.     }  
  26.     return self;  
  27. }  
  28.   
  29. - (void)viewDidLoad  
  30. {  
  31.     [super viewDidLoad];  
  32.     CGRect frame = [UIScreen mainScreen].applicationFrame;  
  33.     int width = frame.size.width;  
  34.     int height = frame.size.height;  
  35.     
  36.     frame = CGRectMake(0, 0, width, height);  
  37.     //初始化scrollView  
  38.     scrollView = [[UIScrollView alloc]initWithFrame:frame];  
  39.     scrollView.showsVerticalScrollIndicator = NO;  
  40.     scrollView.showsHorizontalScrollIndicator = YES;  
  41.     scrollView.pagingEnabled = YES;  
  42.     scrollView.contentSize = CGSizeMake(width*2, height);//scrollView内存大小  
  43.     scrollView.scrollsToTop = NO;  
  44.     //设置代理  
  45.     scrollView.delegate = self;  
  46.       
  47.       
  48.     int pageControlHeight = 50;  
  49.     NSLog(@"width=%d,height=%d",width,height);  
  50.     //初始化pageControl  
  51.     pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, height-pageControlHeight, width, pageControlHeight)];  
  52.       
  53.     //pageControl设定  
  54.     pageControl.numberOfPages = 2; //2页  
  55.     pageControl.currentPage = 0;  
  56.     pageControl.hidesForSinglePage = NO;  
  57.     pageControl.backgroundColor = [UIColor blackColor];  
  58.     [pageControl addTarget:self action:@selector(pageControlChanged:) forControlEvents:UIControlEventValueChanged];  
  59.       
  60.     //初始化welComeViewController、featureListViewController  
  61.     welComeViewController = [[WelcomeViewController alloc]initWithNibName:@"WelcomeViewController" bundle:nil];  
  62.     featureListViewController = [[FeatureListViewController alloc]initWithNibName:@"FeatureListViewController" bundle:nil];  
  63.       
  64.     //设定welComeViewController的位置  
  65.     frame = scrollView.frame;  
  66.     frame.origin.y = 0;  
  67.     welComeViewController.view.frame = frame;  
  68.       
  69.     //设定featureListViewController的位置  
  70.     frame.origin.x = frame.size.width;  
  71.     featureListViewController.view.frame = frame;  
  72.       
  73.     //将welComeViewController、featureListViewController加入到scrollView中  
  74.     [scrollView addSubview:welComeViewController.view];  
  75.     [scrollView addSubview:featureListViewController.view];  
  76.     //scrollView设置为黑色背景  
  77.     scrollView.backgroundColor = [UIColor blackColor];  
  78.       
  79.     [self.view insertSubview:scrollView atIndex:0];  
  80.     //将pageControl的atIndex设置为1,pageControl的view在scrollView的view的上层  
  81.     [self.view insertSubview:pageControl atIndex:1];  
  82. }  
  83.   
  84. - (void)viewDidUnload  
  85. {  
  86.     [super viewDidUnload];  
  87.     // Release any retained subviews of the main view.  
  88.     pageControl = nil;  
  89.     scrollView = nil;  
  90.     welComeViewController = nil;  
  91.     featureListViewController = nil;  
  92. }  
  93.   
  94. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
  95. {  
  96.     return (interfaceOrientation == UIInterfaceOrientationPortrait);  
  97. }  
  98.   
  99. //点击pageControl上的白色点触发的事件  
  100. -(void)pageControlChanged:(id)sender{  
  101.     int page = pageControl.currentPage;  
  102.     NSLog(@"page=%d",page);  
  103.     CGRect frame = scrollView.frame;  
  104.     frame.origin.x = frame.size.width*page;  
  105.     frame.origin.y = 0;  
  106.     [scrollView scrollRectToVisible:frame animated:YES];  
  107.     pageControlUsed = YES; //用户通过点击Page Control换页时将其设置为YES  
  108. }  
  109.   
  110.   
  111. #pragma pageControl methods  
  112. - (void)scrollViewDidScroll:(UIScrollView *)sender{  
  113.     NSLog(@"scrollViewDidScroll...");  
  114.     if(pageControlUsed){//如果用户通过点击Page Control换页,则不做处理  
  115.         return;  
  116.     }  
  117.     CGFloat pageWidth = scrollView.frame.size.width;  
  118.     NSLog(@"pageWidth=%.2f,scrollView.contentOffset.x=%.2f",pageWidth,scrollView.contentOffset.x);  
  119.     NSLog(@"@ %.2f,%2.f",floor(-0.5),floor(-0.6));  
  120.     //计算滚到哪页  
  121.     int page = floor((scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1;  
  122.     pageControl.currentPage = page;  
  123. }  
  124.   
  125. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{  
  126.     pageControlUsed = NO;//滚动结束后将pageControlUsed重置为NO  
  127. }  
  128.   
  129.   
  130. @end  
UIPageControl 由一系列小圆点组成,每个点代表一页,白色的点代表当前选中的页。

其实现多视图的原理是scrollView的宽度为WelcomeViewController、FeatureListViewController中View的宽度之和,并且WelcomeViewController、FeatureListViewController的View都是作为scrollView的子视图。当第一页被选中时显示WelcomeViewController的view,但是第二页被选中时显示FeatureListViewController的view。

7、编译、运行,效果如下:

点击下载本文源代码


=========================================================

这是个废材功能阿,实际开发意义不大,谁需要用这个小点点代表页数阿,而且用pageControl限制太多,已经不适合当下的App开发风格了

内容概要:本文详细介绍了扫描单分子定位显微镜(scanSMLM)技术及其在三维超分辨体积成像中的应用。scanSMLM通过电调透镜(ETL)实现快速轴向扫描,结合4f检测系统将不同焦平面的荧光信号聚焦到固定成像面,从而实现快速、大视场的三维超分辨成像。文章不仅涵盖了系统硬件的设计与实现,还提供了详细的软件代码实现,包括ETL控制、3D样本模拟、体积扫描、单分子定位、3D重建和分子聚类分析等功能。此外,文章还比较了循环扫描与常规扫描模式,展示了前者在光漂白效应上的优势,并通过荧光珠校准、肌动蛋白丝、线粒体网络和流感A病毒血凝素(HA)蛋白聚类的三维成像实验,验证了系统的性能和应用潜力。最后,文章深入探讨了HA蛋白聚类与病毒感染的关系,模拟了24小时内HA聚类的动态变化,提供了从分子到细胞尺度的多尺度分析能力。 适合人群:具备生物学、物理学或工程学背景,对超分辨显微成像技术感兴趣的科研人员,尤其是从事细胞生物学、病毒学或光学成像研究的科学家和技术人员。 使用场景及目标:①理解和掌握scanSMLM技术的工作原理及其在三维超分辨成像中的应用;②学习如何通过Python代码实现完整的scanSMLM系统,包括硬件控制、图像采集、3D重建和数据分析;③应用于单分子水平研究细胞内结构和动态过程,如病毒入侵机制、蛋白质聚类等。 其他说明:本文提供的代码不仅实现了scanSMLM系统的完整工作流程,还涵盖了多种超分辨成像技术的模拟和比较,如STED、GSDIM等。此外,文章还强调了系统在硬件改动小、成像速度快等方面的优势,为研究人员提供了从理论到实践的全面指导。
内容概要:本文详细介绍了基于Seggiani提出的渣层计算模型,针对Prenflo气流床气化炉中炉渣的积累和流动进行了模拟。模型不仅集成了三维代码以提供气化炉内部的温度和浓度分布,还探讨了操作条件变化对炉渣行为的影响。文章通过Python代码实现了模型的核心功能,包括炉渣粘度模型、流动速率计算、厚度更新、与三维模型的集成以及可视化展示。此外,还扩展了模型以考虑炉渣组成对特性的影响,并引入了Bingham流体模型,更精确地描述了含未溶解颗粒的熔渣流动。最后,通过实例展示了氧气-蒸汽流量增加2%时的动态响应,分析了温度、流动特性和渣层分布的变化。 适合人群:从事煤气化技术研究的专业人士、化工过程模拟工程师、以及对工业气化炉操作优化感兴趣的科研人员。 使用场景及目标:①评估不同操作条件下气化炉内炉渣的行为变化;②预测并优化气化炉的操作参数(如温度、氧煤比等),以防止炉渣堵塞;③为工业气化炉的设计和操作提供理论支持和技术指导。 其他说明:该模型的实现基于理论公式和经验数据,为确保模型准确性,实际应用中需要根据具体气化炉的数据进行参数校准。模型还考虑了多个物理场的耦合,包括质量、动量和能量守恒方程,能够模拟不同操作条件下的渣层演变。此外,提供了稳态求解器和动态模拟工具,可用于扰动测试和工业应用案例分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值