第 章 UI攻略 关于UI的攻略 我们轻易就能写出整整一本书 毕竟iOS SDK中值得讨论的类库与模式似乎无穷无尽 最终 我们决定专注于读者会反复遇到 却又记不清以前的解决方式的那些简单的模式与问题 展示针对这些问题的优秀解决方案 这一章 我们将介绍有关视图切
第章 UI攻略
关于UI的攻略我们轻易就能写出整整一本书毕竟iOS SDK中值得讨论的类库与模式似乎无穷无尽最终我们决定专注于读者会反复遇到却又记不清以前的解决方式的那些简单的模式与问题展示针对这些问题的优秀解决方案
这一章我们将介绍有关视图切换网页内容触摸处理和定制控件的攻略这些攻略可供读者拿来使用也可能纯粹为了启发读者去思考如何让自己的代码可以复用于将来的项目
攻略 添加基本的启动画面切换()
问题
应用程序启动时从默认图像到实际UI的切换如果很生硬带给用户的第一印象会很糟糕我们想让从应用程序的启动图像到初始UI的切换尽可能平滑流畅但不清楚如何用最简洁的方式实现
解决方案
iOS app启动的直观体验是这样的
() 用户点击app图标
() app的默认图像逐渐放大显示到屏幕上
() app的初始UI加载到内存
() UI显示到屏幕上取代默认图像
如果默认图像是品牌的横幅或其他特有的图片那么由它到实际UI的切换可能会让用户觉得生硬我们需要一种从启动画面到运行的程序之间的平滑切换这可以通过许多方式来实现我们从最简单的一种方式讲起这应该是一种普遍适用的方式我们先来处理一个纵向的iPhone程序接下来看看支持各种方向的iPad版本初始画面如图所示
图 启动画面与初始UI
最简单的启动画面切换是默认图像淡出而UI同时淡入这种切换容易实现成本不高又能让用户体验截然不同想想看这是用户第一眼看到的东西没有理由不做得平滑顺畅
为了使默认图像淡出屏幕首先需要显示一个视图由它显示这幅图像然后把这个视图淡出这很容易先创建一个可用于任何项目的简单的视图控制器由它使用定制的启动屏幕图像并定义一个执行淡出的hide方法
BasicSplashScreen/PRPSplashScreenh
@interface PRPSplashScreen : UIViewController {}
@property (nonatomic retain) UIImage *splashImage;
@property (nonatomic assign) BOOL showsStatusBarOnDismissal;
@property (nonatomic assign) IBOutlet id delegate;
(void)hide;
@end
接口中有一个delegate属性声明为id 类型这个PRPSplashScreenDelegate协议定义在独立的头文件中向相关程序传达启动画面的状态启动画面何时开始显示何时开始切换及何时结束切换
读者肯定在很多地方做过委托所做的事情但很可能以前没有定义过委托我们来看看这个协议的定义请注意@optional关键字这意味着该委托不要求实现它声明的所有方法一个对象如果想知道启动画面的状态可以声明自己遵守PRPSplashScreenDelegate协议实现一个或多个委托方法并把自己赋值给启动画面的delegate属性
BasicSplashScreen/PRPSplashScreenDelegateh
@protocol PRPSplashScreenDelegate
@optional
(void)splashScreenDidAppear:(PRPSplashScreen *)splashScreen;
(void)splashScreenWillDisappear:(PRPSplashScreen *)splashScreen;
(void)splashScreenDidDisappear:(PRPSplashScreen *)splashScreen;
@end