在讲述框架以前,咱们能够想象一个问题,那就是为何咱们每次建立文件的时候,都去选择Cocoa Class或者Cocoa Touch Class 尼?编程
Cocoa 是什么?框架
ocoa不是一种编程语言(它能够运行多种编程语言),它也不是一个开发工具(经过命令行咱们仍然能够开发Cocoa程序),它是建立Mac OS X和IOS程序的原生面向对象API,为这二者应用提供了编程环境。编程语言
咱们一般称为“Cocoa框架”,事实上Cocoa自己是一个框架的集合,它包含了众多子框架,其中最重要的要数“Foundation”和“UIKit”。前者是框架的基础,和界面无关,其中包含了大量经常使用的API;后者是基础的UI类库,之后咱们在IOS开发中会常常用到。这两个框架在系统中的位置以下图:函数
![]()
其实全部的Mac OS X和IOS程序都是由大量的对象构成,而这些对象的根对象都是NSObject,NSObject就处在Foundation框架之中工具
一般咱们会将他们分为几类:布局
值对象开发工具
集合测试
操做系统服务:文件系统、URL、进程通信atom
通知spa
归档和序列化
表达式和条件判断
Objective-C语言服务
在C语言阶段咱们已经学过结构了,而为了简化咱们的开发,Foundation框架为咱们预先建立了不少,在开发中经常使用的结构体。这样的话,咱们就没必要要每次建立项目的时候都去建立一样的代码。
1.NSSize NSPoint NSRange NSRect
NSSize NSPoint NSRange NSRect 四种结构体,通常用于图形方面
//图形的宽高 NSSize nssize =NSMakeSize(3, 5); NSLog(@"width:%lf,height:%lf",nssize.width,nssize.height); //图形的坐标 NSPoint nspoint = NSMakePoint(3, 5); NSLog(@"x:%lf,y:%lf",nspoint.x,nspoint.y); // 范围 NSRange nsrange = NSMakeRange(3, 5); NSLog(@"location:%ld,length:%ld",nsrange.location,nsrange.length); //图形的坐标和宽高 NSRect nsrect = NSMakeRect(5, 5, 100, 100); NSLog(@"x:%lf,y:%lf,width:%lf,height:%lf",nsrect.origin.x,nsrect.origin.y,nsrect.size.width,nsrect.size.height);
实例讲解:
题目:
建立一个矩形类,建立一个自定义构造方法initWithFrame:(NSRect)rect
根据下图,打印出图形
0 1 2 3 4 5 6 7 8 9
1
2
3 * * * *
4 * * * *
5 * * * *
7 * * * *
8
9
#import <Foundation/Foundation.h> @interface Rectangle : NSObject #pragma mark 矩形的方位和宽高 @property (nonatomic,readwrite,assign)CGRect rect; /** * 初始化布局 * * @param newRect 新的布局 * * @return */ - (id)initWithFrame:(CGRect)newRect; /** * 显示图形 */ - (void)display; @end #import "Rectangle.h" @implementation Rectangle - (id)initWithFrame:(CGRect)newRect { if(self = [super init]) { [self setRect:newRect]; 等同于 self.rect = newRect } return self; } - (void)display { for (int i = 0; i<=9; i++) { for (int j = 0; j<=9;j++) { if(i==0) printf("%d",j); else if(j==0&&i!=0) printf("%d",i); else if(j>=self.rect.origin.x&& i>=self.rect.origin.y&& j<self.rect.origin.x+self.rect.size.width&& i<self.rect.origin.y+self.rect.size.height) { printf("*"); }else printf(" "); } printf("\n"); } } @end //main函数测试 int main(int argc, const char * argv[]) { @autoreleasepool { Rectangle *rect = [[Rectangle alloc]initWithFrame:(CGRect){4,6,4,4}]; [rect display]; } return 0; }运行结果:
2016-04-11 12:55:01.481 oc_single[1931:91316] 调用
0123456789
1
2
3
4
5
6 ****
7 ****
8 ****
9 ****
Program ended with exit code: 0
该类结构主要适用于UI控件的方位和大小调控。
经过上面实例,咱们再增长一个系列, 建立一个矩形,建立自定义构造方法设定它的布局,而后每隔2秒,让它移动向下移动一厘米。
将main函数的代码替换掉:
#import "Rectangle.h" int main(int argc, const char * argv[]) { @autoreleasepool { int y = 0; Rectangle *rect = [[Rectangle alloc]initWithFrame:(CGRect){0,y,4,4}]; NSDate *startTime = [NSDate date]; 开始时间 NSTimeZone *timeZone = [NSTimeZone systemTimeZone]; NSInteger interval = [timeZone secondsFromGMTForDate:startTime]; 开始时间设置 startTime = [startTime dateByAddingTimeInterval:interval]; NSLog(@"%@",startTime); NSDate* endTime = [NSDate date]; while (1) { 获取结束时间 endTime = [NSDate date]; endTime = [endTime dateByAddingTimeInterval:interval]; 判断结束时间和开始时间的时间差 int ret = (int)[endTime timeIntervalSinceDate:startTime]; if(ret==2) { 获取图形的布局 CGRect tempRect = [rect rect]; 让这个布局的y坐标向下移动 tempRect.origin.y++; tempRect.origin.x++; 从新设置图形的布局 [rect setRect:tempRect]; 显示这个布局 [rect display]; 让开始时间变成结束 startTime = endTime; } } } return 0; }