iPhone的开发现在大家还是在摸索的阶段,当然不排除有人已经进阶。
现在就简单得介绍一下默认创建的工程的分析。 开发环境:Mac OS X10.5, XCode 实例代码:默认项目 创建默认项目后,就可以进行 build,然后就可以在模拟器上运行,那么,这个最基本的程序的启动与执行流程 是什么样子的呢,
那么现在来分析一下
1、程序入口点 创建的项目中,在XCode 的 Other Classes中,有一个 main.m的文件,入口点就在这里, 方法: int main(int argc, char * argv[]) 就是整个程序的入口,和 C语言一样
2、主程序设置 main方法中有一个 UIApplicationMain(xx, xx, xx, xx,); 这个方法调用,关键就在这里,其中最后一个 参数的意义就是 DelegateClass,这个就是指定的代理类的名称,代理的意思就是,执行这个方法后, 系统会装载指定的类,并且执行相应的方法,进入循环中。
3、代理类 Delegate 代理类 基本上名称是 XXXAppDelegate,其中需要定义 - (void)applicationDidFinishLaunchingUIApplication *)application 方法,该方法的含义是,当系统装载完成 程序时,执行该方法操作
4、applicationDidFinishLaunching 装载 显示界面 创建 Window, 装载 MyView,创建并显示
5、MyView 自定义 View,如果使用 Interface Builder 进行设计的话该默认文件几乎无用,以下介绍自定义View -(void)init 方法,重载该方法,可以进行各种属性设置 -(void)drawRectCGRect)rect 方法,这个类似于 J2ME 中 Canvas的 paint方法,在该方法内部可以进行绘制操作
6、完毕
如果需要界面重绘事件,可以使用 函数 OnTimer
-(void) onTimer {
float x = fireBall.center.x;
float y = fireBall.center.y;
fireBall.center = CGPointMake(fireBall.center.x + pos.x, fireBall.center.y + pos.y);
if (fireBall.center.x > 320 || fireBall.center.x < 0)
pos.x = -pos.x;
if (fireBall.center.y > 460 || fireBall.center.y < 0)
pos.y = -pos.y;
UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"smokeball.png"]];
imageView.frame = CGRectMake(x-16, y-16, 32, 32);
[self.view addSubview:imageView];
[UIView beginAnimations:nil context:imageView];
[UIView setAnimationDuration:3.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
imageView.frame = CGRectMake(x-6, y-6, 12, 12);
[imageView setAlpha:0.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(removeSmoke:finished:context:)];
[UIView commitAnimations];
[imageView release];
[self.view bringSubviewToFront:fireBall];
}
- (void)viewDidLoad {
pos = CGPointMake(15.0, 7.5);
self.view.backgroundColor = [UIColor blackColor];
fireBall = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"fireball.png"]];
fireBall.frame = CGRectMake(0, 0, 32, 32);
[self.view addSubview:fireBall];
[NSTimer scheduledTimerWithTimeInterval:(0.05) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}