iOS7 最佳实践:一个天气应用案例(上)

1567 查看

在这个两部分的系列教程中,您将探索如何使用以下工具和技术来创建自己的App:

本教程专为熟悉基本知识的、但还没有接触到太多高级主题的中级开发者而设计。本教程也是想要去探索Objective-C函数编程一个很好的开始。

开始

打开Xcode并执行File\New\Project。选择Application\Empty Application。将项目命名为SimpleWeather,单击下一步,选择一个目录去保存你的项目,然后点击Create。 现在,你的基础项目已经完成。下一步是集成你的第三方工具。但首先你要关闭Xcode,确保他不会影响下一步。

Cocoapods

你将要下载Cocoapods的代码,在Xcode项目中添加文件来使用,并配置项目需要的设置。

Mantle

Mantle是由于Github团队开发的,目的是去除Objective-C把JSON数据转为NSObject子类的所有样板代码。Mantle也能做数据转换,通过一种神奇的方式把JSON原始数据(strings, ints, floats)转换为复杂数据,比如NSDate, NSURL, 甚至是自定义类。

LBBlurredImage

LBBlurredImage是一个继承自UIImageView,轻而易举使图像模糊的项目。你将仅仅用一行代码来创建一个神奇的模糊效果。

TSMessages

TSMessages 是另一个非常简单的库,用来显示浮层警告和通知。当出现错误信息而不直接影响用户的时候,最好使用浮层来代替模态窗口(例如UIAlertView),这样你将尽可能减少对用户的影响。

你将只用TSMessages,在网络失去连接或API错误的时候。如果发生错误,你将看到类似这样的一个浮层:

TSefegfergrefgerMessage

ReactiveCocoa

最后,你将使用到ReactiveCocoa,他也来自于GitHub团队。ReactiveCocoa给Objective-C带来了函数编程,类似与.NET的Reactive Extensions。你将在第二部分花费大部分时间去实现ReactiveCocoa。

设置你的Cocoapods

设置你的Cocoapods,先要确保你已经安装了Cocoapods。为此,打开命令行程序,并输入。

你将会看到类似这样的输出:

这决定于你如何管理Ruby gems,例如你使用rbenvRVM,路径可能有所不同。

如果命令行简单的返回提示,或显示pod not found,表示Cocoapods未安装在你的机器上。可以查看我们的Cocoapods教程作为安装说明。这也是一个很好的资源,如果你想更多得了解Cocoapods的话。

Podfiles是用来告诉Cocoapods哪些开源项目需要导入。

要创建你的第一个Cocoapod,首先在命令行中用cd命令导航到你的XCode项目所在的文件夹,在命令行中启动编辑器,输入

这文件做了两件事情:

  • 告诉Cocoapods你的目标平台与版本,这里的你目标是iOS 7.0。
  • 列给Cocoapods一个项目所有需要引入和安装的三方库清单。

在命令行中输入pod install进行安装。

这可能需要花一到两分钟的时间去安装各种包。你的命令行应该输出如下所示:


Cocoapods会在你的项目目录中创建一堆新文件,但是,只有一个需要你关心,SimpleWeather.xcworkspace

用Xcode打开SimpleWeather.xcworkspace。看看你的项目设置,现在有一个Pods项目在你的项目工作区,以及在Pods文件夹放着每一个你引入的库,如下所示:

SimpleWeather-Cocoapods

SimprefregfleWeather-Project

确保你已经选择SimpleWeather项目,如图所示:

构建并运行您的App,以确保一切工作正常:

blfvvgregergank-app


创建你的主视图控制器

虽然这个App看起来复杂,但它还会通过一个单一的View Controller完成。现在,你将添加他。

选中SimpleWeather项目,单击File\New\File,并且选择Cocoa Touch\Objective-C class. 命名为WXController,并设置为UIViewController的子类。

确保Targeted for iPadWith XIB for user interface都没有选中,如下图所示:

create-rtgregecontroller

打开WXController.m然后用如下所示替换-viewDidLoad方法:

现在打开AppDelegate.m,并且引入如下两个class:

眼尖的读者会注意到WXController使用引号引入,TSMessage使用单括号引入。

回头看下当你创建Podfile的时候,你使用Cocoapods引入TSMessage。Cocoapods创建TSMessage项目,并把它加入到工作空间。既然你从工作区的其他项目导入,可以使用尖括号代替引号。

代替-application:didFinishLaunchingWithOptions的内容:

标号注释的解释:

  1. 初始化并设置WXController实例作为App的根视图控制器。通常这个控制器是一个的UINavigationControllerUITabBarController,但在当前情况下,你使用WXController的单个实例。
  2. 设置默认的视图控制器来显示你的TSMessages。这样做,你将不再需要手动指定要使用的控制器来显示警告。

构建并运行,看看你的新视图控制器起作用了。

wxcontfvdvroller-red

在红色背景下,状态栏有点不够清晰。幸运的是,有一个简单的方法,使状态栏更清晰易读。

在iOS7,UIViewController有一个新的API,用来控制状态栏的外观。打开WXController,直接添加下面的代码到-viewDidLoad:方法下:

 

再次构建并运行,你将看到状态栏如下的变化:

wxcontroller-red-status1

设置你的App视图

现在是时候让你的App接近生活。下载这个项目的图片,并解压缩到一个合适的位置。这个压缩包的背景图片出自Flickr用户idleformat之手,天气图片出自Dribbble用户heeyeun之手。

切换回Xcode,单击File\Add Files to “SimpleWeather”….定位到你刚刚解压缩的图片文件夹并选择它。选择Copy items into destination group’s folder (if needed),然后单击Add

打开WXController.h, 添加如下委托协议:

现在打开WXController.m。 小提示:你可以使用Control-Command-Up的快捷键来实现.h.m文件之间的快速切换。

添加如下代码到WXController.m顶部:

LBBlurredImage.h包含在Cocoapods引入的LBBlurredImage项目,你会使用这个库来模糊背景图片。

应该有一个空的私有接口样板在WXController imports的下方。它具有以下属性:

现在,是时候在项目中创建并设置视图。

下面是你App的分解图,记住,table view将是透明的:

scrervververveens

为了实现动态模糊效果,在你的App中,你会根据App的滚动来改变模糊图像的alpha值。

打开WXController.m,使用如下代码来,替换掉-viewDidLoad中设置背景色的代码: