iPhone SDK开发基础是本文要介绍的内容,我们先来看内容,主要介绍了iPhone程序框架的一些知识。总的来说iPhone程序有两类框架,一类是游戏框架,另一类是非游戏框架,这里介绍的是非游戏框架,即基于iPhone 用户界面标准控件的程序框架。
典型的iPhone程序包含一个Window和几个UIViewController,每个UIViewController管理多个UIView(可能是UITableView、UIWebView、UIImageView等),如图3-24所示。这些UIView之间如何进行层次迭放、显示、隐藏、旋转、移动等都由UIViewController进行管理,而UIViewController之间的切换,通常情况是通过UINavigationController、UITabBarController或UISplitViewController进行切换。接下来笔者会逐一介绍如何使用这三种Controller来切换你的UIViewController,以及在UIViewController中如何组织和管理你的各种UIView。
图3-24 iPhone程序框架示意图3.12.1
使用UINavigationController组织和管理UIView当你的程序具有层次化的工作流时,就比较适合使用UINavigationController来管理UIViewController,即用户可以从上一层界面进入下一层界面,在下一层界面处理完以后又可以简单地返回到上一层界面,UINavigationController使用堆栈的方式来管理UIViewController,进入下一层界面的代码如下。
- [self.navigationController pushViewController:nextController animated:YES];
返回上一层界面的代码如下。
- [self.navigationController popViewControllerAnimated:YES];
如图3-25所示,屏幕左上方的“Animal List”按钮是返回按钮,注意这个返回按钮是UINavigationController自动添加的,不需要编写任何代码在界面上添加按钮或者实现按钮操作,当程序使用pushViewController()函数将ViewController添加进UINavigation Controller的时候,UINavigationController就自动显示这个返回按钮,用户单击这个“Animal List”按钮就可以回到原先的界面,UINavigationController的这种运行机制产生这样的效果,用户可以一层一层地进入更深的界面层次,然后又可以一层一层的按顺序返回,使用这样的方式来组织用户界面非常方便。
本节相关的完整Xcode工程源代码文件请参考本书附带的光盘中的Zoo实例。
图3-25 UINavigationController 程序框架实例界面
3.12.2 使用UITabBarController组织和管理UIView
当你的程序分为几个相对比较独立的部分时,就比较适合使用UITabBarController来组织用户界面,如图3-26所示。
图3-26 UITabBarController程序框架实例界面
在屏幕的下方包含UITabBarController的三个按钮,用户单击不同的按钮即可以进入不同的界面,每个界面相对来说在整个系统中比较独立,也就是程序分成了三个相对比较独立的不同部分,在每个相对独立的部分你也可以使用UINavigationController等容器类组织你的界面。这样组织使程序逻辑非常清晰,当然你也可以组织很多个Tab而不只是三个,以下代码演示如何创建UITabBarController对象,并为其添加多个Tab。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
- // Override point for customization after application launch.
- //Create the navigation Controller
- UINavigationController *localNavigationController;
- //Create UINavigationController tabBarController = [[UITabBarController alloc] init];
- tabBarController.delegate = self;
- // Create the array that will contain all the View controlelr
- NSMutableArray *localControllersArray = [[NSMutableArray alloc] init WithCapacity:3];
3.29 OpenFlow编程
当用户界面需要按页面显示图片时,使用OpenFlow库提供的功能,将要显示的用户界面图片分页进行显示会使编程工作变得非常快捷。该库提供了与OS X桌面Finder程序相同的视觉效果,如图3-46所示就是一个使用OpenFlow库逐页进行图片显示的程序,用户按下屏幕即可进行左右滚动显示,双击图片即可对当前显示的图片进行选取操作。
图3-46 OpenFlow编程实例界面
程序在视图控制器的viewDidAppear()中使用refreshCoverFlow()函数初始化OpenFlow库,通过setNumberOfImages()函数设置图片数量,代码如下。
- // RootViewController.m- (void)refreshCoverFlow{
- CGRect bounds = [[UIScreen mainScreen] bounds];
- AFOpenFlowView *coverFlowView = (AFOpenFlowView*)[self.view viewWithTag:kTagCoverflow];
- if(coverFlowView != nil) [coverFlowView removeFromSuperview];
- coverFlowView = [[AFOpenFlowView alloc] initWithFrame:CGRectMake(0, -30, bounds.size.width, COVERFLOWHEIGHT)];
- coverFlowView.dataSource = self;
- coverFlowView.viewDelegate = self;
- coverFlowView.defaultImage = [self defaultImage];
- coverFlowView.tag = kTagCoverflow;
- [self.view addSubview:coverFlowView];
3.30 UIPageControl编程
当用户界面需要按页面进行显示时,使用iOS提供的UIPageControl控件将要显示的用户界面内容分页进行显示会使编程工作变得非常快捷,如图3-47所示就是一个使用UIPageControl控件逐页进行图片显示的程序,用户按下屏幕即可进行左右滚动显示,在屏幕的正上方使用白色的点显示当前滚动到的页面位置。
图3-47 UIPageControl编程实例界面
程序自定义一个SwipeView类,该类通过子类化UIView类并重载其touchesMoved()方法捕获用户滚动的方向,类的定义如下。3.31 自定义仪表控件
在iOS开发中,因为程序的需要,有时要自行绘制iPhone SDK没有提供的界面控件,通常使用QuartzCore.framework即可画出你所需要的各种图形,在这里我们实现一个圆形的“仪表盘”控件,控件的外观如图3-48所示,用户可以通过旋转仪表控件的指针来设置程序需要的各种系统参数。
图3-48 “仪表盘”控件控件使用两个UIView来实现仪表控件,并通过CGAffineTransform类来实现仪表指针的旋转,控件在UIDialView类中实现,UIDialView类的定义如下。
- // UIDialView.h
- #import <UIKit/UIKit.h>
- @protocol UIDialViewDelegate
- @optional- (void)dialValue:(int)tag Value:(float)value;
- @end
小结:关于iPhone SDK开发基础的内容介绍完了,希望本文对你有所帮助,更多相关iphone的内容请参考编辑推荐。