准老爸日记18

2010年8月24日,阴,天气很好!

小力(小丽)同学,最近好事不断呢,和你分享一下.

1.老爸升职涨工资了,这下你老妈最高兴了,说可以给你买很多好东西了.结果她自己先去买了一堆!

2.有出版社想将你老爸写的iPad程序教程做成书,出版.但是目前中国IT书籍的出版销售状况,50%的都是赔钱的,卖出都不足3000本.老爸担心我也是这50%之一,毕竟第一次写!而且进度还这么慢!但是估计ipad书籍应该比较有市场,因为如果ipad进入了天朝国,以天朝国程序员山寨和模仿的能力,可以衍生出多少软件产业,吸引多少以为能从中赚钱成就事业的大学小学生们前仆后继的向这个里面飞蛾扑火呢?

3.周末要带你,和你妈妈,你外婆出去呼吸新鲜空气.金佛山,我再一次去!

4.你包大姑,今天被困在昆明了!飞机罢飞,东航又一次的欺负了她!我怎么老是把别人的痛苦当作是我的开心甜点呢,这个思想要不得,要不得.笑笑就是了,千万别告诉你包大姑!

5.你老妈说同意我出去驴行一次....这个有待考证!

在iPad程序中,我们通常用视图来管理窗口的执行过程和内存管理.在View-based Application这个例子中,Xcode将会自动用视图管理器帮助你管理你的窗口.

在前面的章节,你见过MainWindow.xib窗口所包含的视图控制项目.当你双击里面的项目,它将显示一个与项目名称相同的窗口.当你用Xcode创建一个程序的时候,这个程序的窗口控制文件都会由(你的程序的名字)+ViewController来管理和执行.

4-7.jpg

现在在Interface Builder中双击viewBasedAppViewcontroller.xib文件来编辑它,注意一下,MainWindow.xib文件中的一些项目已经被包含进了viewBaseAppViewController.xib窗口中.在这个例子中里面包含:File's Owner,First Responder和View.

你能用右键(或者按住Ctrl点击)File's Owner项目,我们将看到一个属性窗口.可以看到一个view的应用已经被链接到了View项目.

4-8.jpg

View项目用于在屏幕上显示你的程序窗口内容.双击它,我们可以看到:

4-9.jpg

当你选择File's Owener项目,我们可以在它的Identity Inspector窗口看到类被指向到了viewBasedAppViewController类,意思就是View窗口正在被viewBasedAppViewController类控制.

4-10.jpg

viewBasedAppViewController类由两个文件组成:viewBasedAppViewController.h和viewBasedAppViewController.m

viewBasedAppViewController类所在的地方你需要用代码来实现它和你应用程序窗口的连接

链接viewBasedAppViewController.h文件:

 

#import <UIKit/UIKit.h>
@interface viewBasedAppViewController : UIViewController {
}
@end

 

#import <UIKit/UIKit.h>

@interface viewBasedAppViewController : UIViewController {

}

@end

注意viewBasedAppViewController类是从UIViewController基础类继承的,由它在View窗口中提供大部分的功能

链接viewBasedAppViewController.m文件:

 

#import “viewBasedAppViewController.h”

@implementation viewBasedAppViewController

 

/*

// The designated initializer. Override to perform setup that

// is required before the view is loaded.

- (id)initWithNibName:(NSString *)nibNameOrNil

bundle:(NSBundle *)nibBundleOrNil {

if ((self = [super initWithNibName:nibNameOrNil

bundle:nibBundleOrNil])) {

// Custom initialization

}

return self;

}

*/

/*

// Implement loadView to create a view hierarchy

// programmatically, without using a nib.

- (void)loadView {

}

*/

/*

// Implement viewDidLoad to do additional setup after

// loading the view, typically from a nib.

- (void)viewDidLoad {

[super viewDidLoad];

}

*/

// Override to allow orientations other than the

// default portrait orientation.

- (BOOL)shouldAutorotateToInterfaceOrientation:

(UIInterfaceOrientation)interfaceOrientation {

return YES;

}

- (void)didReceiveMemoryWarning {

// Releases the view if it doesn’t have a superview.

[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren’t in use.

}

- (void)viewDidUnload {

// Release any retained subviews of the main view.

// e.g. self.myOutlet = nil;

}

- (void)dealloc {

[super dealloc];

}

@end

 

 

 

 

接上节:

Application Delegate

viewBasedAppAppDelegate.m文件,当你用Xcode创建一个应用程序,你的应用程序总是用AppDelegate字符串来描述,它总是用“你的程序的名字”+AppDelegate来显示。它的代码将在程序完成装载时被执行完成,然后终止。

 

#import “viewBasedAppAppDelegate.h”
#import “viewBasedAppViewController.h”
@implementation viewBasedAppAppDelegate
@synthesize window;
@synthesize viewController;
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)
launchOptions {
// Override point for customization after app launch
[window addSubview:viewController.view];
[window makeKeyAndVisible];
return YES;
}
- (void)dealloc {
[viewController release];
[window release];

 

#import “viewBasedAppAppDelegate.h”

#import “viewBasedAppViewController.h”

@implementation viewBasedAppAppDelegate

@synthesize window;

@synthesize viewController;

- (BOOL)application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)

launchOptions {

// Override point for customization after app launch

[window addSubview:viewController.view];

[window makeKeyAndVisible];

 

return YES;

}

- (void)dealloc {

[viewController release];

[window release];

 

[super dealloc];

}

@end

当应用程序已经完成装载,它将发出一个application指令:DidFinishLaunchingWithOptions:message它被用于让窗口控制器将窗口显示出来.

viewBasedAppDelegate.h文件包含viewBasedAppDelegate所有类成员的声明:

 

#import <UIKit/UIKit.h>

@class viewBasedAppViewController;

@interface viewBasedAppAppDelegate : NSObject <UIApplicationDelegate> {

UIWindow *window;

viewBasedAppViewController *viewController;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet viewBasedAppViewController

*viewController;

@end

详细说明一行代码:@interface viewBasedAppAppDelegate : NSObject <UIApplicationDelegate> {

这个<UIApplicationDelegate>是程序引用UIApplicationDelegate协议的指定声明.UIApplicationDelegate协议事件还包括下面一些事件:

 

➤➤ Application:DidFinishLaunchingWithOptions: 

➤➤ applicationWillTerminate:

➤➤ applicationDidDidReceiveMemoryWarning:

Application Delegate类用于放置一些整个程序中都会用到的对象和函数,以便程序中的其它类的调用.

 

 

 

 

 

准老爸日记17

2010年8月20日 热啊,太阳老大了!星期五凌晨1:00

今天有同学抱怨老九很久没有更新博客了,这里要给还在关注老九这个破博客的TX们说一声Sorry了!这周事情繁杂,准备标书,投标,搬家(上次已经搬了一次了,这是搬剩下的)、租房、丈母娘回家后照顾我们的准妈妈,吃习惯吃坏肚子、准备再一次招标……SO。现在得空了写一篇博客,明天周末继续编写课程。

今天你的太郎胖叔叔去买了一个3G版的iPad,估计今天晚上他要兴奋过头,砍菜到天明。

今天还是IE诞生15周年纪念日,当初这个是出名门的小徒弟,怎么也不会想到现在会有这么大一滩!而且绝对也不会想到15年后Google依靠浏览器上网中的一个搜索业务,在公司价值上超过了IE的爸爸MS。当初死掉的网景,也绝不会想到现在的浏览器依靠免费都可以这么的赚钱。IE也不会想到除了用在PC上,浏览器可以发展到这么大一个家庭,用在手机、电视、播放器等等一切有显示屏可以上网的地方。IE现在到了9代了,Oprea到10了,Fox到4了,Chrome到6了,其它杂牌就更不用说了!

今天数一数浏览器诞生后所衍生出来的产品:电子书应该算,上网本应该算,最牛不过iPad,最人气不过云计算,其它如PHP、CSS、ASP、.net、jsp、当初的flash、fireworks、dm三剑客、已经消失不见的frontpage。很少有一个软件能像像IBM286,Inter奔腾系列,苹果II,Ipod,Iphone,voodoo带给IT界这样的变化,这应该算是改变了计算机产业的事物了。在我心中能和这个相提并论的就只有手机的出现了。

MS也失误了,它错误的估算了互联网的威力。还是把自己的研发中心放在OS和Office上,其它的有实力的开发很少,游戏除外。这就是互联网的游戏规则,今天在中国互联网大会召开的同时一种新的声音在业界蔓延“万维网以死”。的确,已PC为媒介的万维网已经不再引领IT的潮流,移动互联网必然会代替PC成为IT界的未来。新的终端必然诞生,很高兴我和你都能生于这个时代,感受真正的人类变迁。

今天,老爸给你将了瓦特发明蒸汽机,斯蒂芬森发明火车,奔驰发明汽车,内努瓦发明内燃机,福特发明流水线、赖特兄弟发明飞机、万户火箭升空结果死了,纪念他把月球背后一火山口叫万户火山口。明天给你将什么呢?好好想想,青霉素的发明?还是坦克的发明?我明天去买本十万个为什么

今天,老爸找到了几张照片,是我和你妈妈去亚丁时候照的。我希望我能早点带你去驴行。

稻城091001 116.jpg

我和你妈妈的背影

DSC_0408.jpg

地狱谷就从这里进去,从这里老爸就独自一人进去探险了!

DSC_0560.jpg

稻城091001 227.jpg

这就是亚丁的牛奶海,本来老爸准备自己走到这里然后坐马回去,结果这里没有马可以坐,只有走回去唉,结果1年后,老爸脚趾甲都还是血色的!

稻城091001 258.jpg

给你一个这样的老爸

稻城091001 261.jpg

这个叫五色海,在上面一个海子往上走1km就看到了,水很漂亮

稻城091001 276.jpg

到目前位置,我们建立的应用程序都是单窗口的,也就是用到了一个视窗控制器。在前面,我们用View-based Application建立的程序在iPhone SDK中会默认给我们建立一个视窗,一般这个窗口的名字为<project_name>ViewController.

在现实中,你经常需要超过1个视窗的程序用于显示不同的信息。这章节我们将创建不同类型的项目来熟悉不同类型的视窗控制器的租用。我们将学习怎么样创建多窗口应用以及各窗口之间的程序转换。

View-Based Application

创建一个View-based Application项目,代码下载:viewBasedApp.rar

1.Xcode,创建一个View-based Application项目,取名:viewBasedApp

2.Ctrl+R,我们可以看到一个空白的屏幕。废话!但是这里我们要将这个程序的原理,就不是废话了!呵呵

它是怎么运行的呢?

我们以View-based Application建立项目的时候,会默认的分配一个视窗给我们羡慕,就是View窗口,它的控制是通过View Contoller 类来完成的。我们来详细了解一下:

首先,我们看看在Xcode里面左侧我们所创建项目的文件和文件列表。在项目名称下面有类和资源的文件夹列表:

4-2.jpg

viewBasedApp.app The application bundle (executable), which contains
the executable as well as the data that is bundled
with the application.
viewBasedApp_Prefix.pch Contains the prefix header for all files in the project.
The prefix header is included by default in the other files
in the project.
viewBasedAppAppDelegate.h Headers file for the application delegate.
viewBasedAppAppDelegate.m Implementations file for the application delegate.
viewBasedAppViewController.h Headers file for a View Controller.
viewBasedAppViewController.m Implementations file for a View Controller.
viewBasedAppViewController.xib The Xib file containing the Ui of a view.
CoreGraphics.framework C-based Apis for low-level 2D rendering.
Foundation.framework APIs for foundational system services such as data types,
xml, urL, and so on.
UIKit.framework Provides fundamental objects for constructing and
managing your application’s ui.
viewBasedApp-Info.plist A dictionary file that contains information about your
project, such as icon, application name, and others;
information is stored in key/value pairs.
main.m The main file that bootstraps your iPad application.
MainWindow.xib The xib file for the main window of the application.

 

 

我们可以看到,默认被创建的文件和文件夹还有很多。为了让我们更便捷的开发iPad应用程序,iPhoneSDK会将常用的资源默认创建。下表是一些常用的文件:

 

viewBasedApp.app 应用程序的管理束,包含执行程序、数据绑定和应用。

viewBasedApp_Prefix.pch 包含这个项目中所有文件头文件前缀

viewBasedAppAppDelegate.h 应用指令的头文件集

viewBasedAppAppDelegate.m 应用指令的执行文件集

viewBasedAppViewController.h 窗口控制的头文件集

viewBasedAppViewController.m 窗口指令的执行文件集

viewBasedAppViewController.xib xib文件包含了窗口文件的UI控制

CoreGraphics.framework C-based Api的低级2D渲染

Foundation.framework 提供基础系统服务API接口,例如:数据、XML,URL等等

UIKit.framework 为你的应用程序提供构建和管理的基本UI

viewBasedApp-Info.plist 字典文件,包含了项目中所有信息,比如图标,名称,等等.此文件向iPhone系统描述应用程序,并支持你指定其可执行文件、应用程序标识符和其它关键特性。

main.m 这个不用解释了吧,学过C的都知道。

MainWindow.xib 应用程序主窗口Xib文件未被填充的窗口。

在main.m文件中,包含代码用于应用程序的引导:

 

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int retVal = UIApplicationMain(argc, argv, nil, nil);

[pool release];

return retVal;

}

 

 

其中UIApplicationMain()函数是最主要的部分,它负责检查viewBasedApp-Info.plist来获得关于这个项目的更多的信息。它相当于项目主函数NIB文件。下图中我们可以看到viewBasedApp-Info.plist所包含的文件。注意到Main nib file base name关键值指向了MainWindow。程序开始的时候NIB文件就直接被读取出来。

4-3.jpg

XIB和NIB是什么?

iPad应用开发中,我们会一直和.xib打交到(有些时候是NIB文件)。要说到这两个文件的历史,我们就要提一下Mac os X操作系统。Mac OS X操作系统的基础是一个叫NeXTSTEP东东。这个东东来自一个叫NeXT的公司,这个公司的老板就是乔布斯,他在被苹果下岗后建立的公司。NIB中的N就是代表NeXT公司的NeXTSTEP,而xib中的x代表XML语言。这个IB就是Interface Builder的简写,用视窗方式构建应用程序。

编辑XIB文件

双击MainWindow.xib文件,正如所讲的xib文件可以用视窗模式来构建程序。xib文件实际上是一个xml文件,你能通过文字编辑器浏览和编辑xib文件。但是选用视窗是比较明智的选择,这样条理更清晰更快捷。

用视窗编辑器打开MinWindow.xib文件,我们可以看到和文件名称一样的一个窗口

4-4.jpg

这个窗口包含5个部分:

Files's Owner 用于将项目调用到用户界面(也就是说用于管理项目做包含的XIB文件)在动态load nib文件的时候会用到,如果是独立的应用程序,启动就加载Nib的话,file‘s owner就是一个站位符了

First Responder 用来响应菜单事件,也可以用来控制在界面上那个control具有初始焦点

viewBasedApp App Delegate 指向viewBasedAppAppDelegate类。当你选择viewBasedApp App Delegate 你可以看到Identity Inspector窗口。

4-5.jpg

View Based App View Controller 指向一个视图控制窗口,你能用来显示你的UI。在这个例子中,它指向viewBasedAppViewController类,当你选择它的时候,我们讷讷感看到它的Identity Inspector窗口

4-6.jpg

Window 主窗口

About Me

我是一个超级苹果迷+老乔的fans和Google的簇拥,一切新奇的事物我都好奇,摄影、运动、旅游、读书、电影、游戏都是我的爱好,荒淫大家给我留言,发邮件,请我吃饭、带我旅游(也不要忘记了我的领导同志!)……

« 2012年2月 »
   1234
567891011
12131415161718
19202122232425
26272829   

微博

统计

文章:119篇
评论:95条 (0条Spam)
相册:11个 (339张图片)
主题:InSense theme