UI学习阶段性小结

#pragma mark  UI阶段性小结

//    UI(User Interface)用户界面

//    iOS App = 各种各样的UI控件 + 业务逻辑和算法

#pragma mark  一、UIView、UILabel、UIWindow

#pragma mark  1、frame是一个结构体,包含2个部分的内容:origin(x和y)和Size(width和height)

#pragma mark  2、bounds(边界)是view的重要属性

//    用于定义自己的边界,同frame一样是一个CGRect结构体变量。修改bounds.origin不会导致自身的位置发生变化,但会使添加在自身的子视图的位置发生变化。修改bounds.size会使自身大小发生变化。不会导致子视图的位置发生变化。

#pragma mark  3、UIView(视图) 添加和管理视图的方法

//    在指定的index处插入视图[superView insertSubview:grayView atIndex:1];

//    在指定的视图上面添加子视图[superview insertSubview:grayView aboveSubview:redView];

//    在指定的视图下面添加子视图[superview insertSubview:grayView belowSubview:redView];

//    把指定的子视图移动到最前面[superview bringSubviewToFront:redView];

//    把指定的子视图移动到最后面[superview sendSubviewToBack:redView];

//    交换两个指定索引位置的子视图[superview exchangeSubviewAtIndex:0 withSubviewAtIndex:2];

//    把receiver从父视图上移除[redView removeFromSuperview];

//    控制视图的显隐redView.hidden = YES;//隐藏redView redView.hidden = NO;//显?示redView

//    控制视图的不透明度(子视图也?一起 透明),取值范围0~1 redView.alpha = 0.8;

//    获取本视图的父视图UIView *superView = [redView superView];

//    获取本视图的所有子视图UIView *superView = [redView superView];

//    获取本视图的所有子视图NSArray *subviews = [redView subviews];

//    给视图添加标记,被加完标记的视 图可以使?用viewWithTag:?方法取出edView.tag = 100;UIView *view = [superview viewWithTag:100];

//    设置圆角度:view.layer.cornerRadius = NSInteger;(正方形设置圆角度为边长的一半,会变成圆形)

//    设置背景色:view.backgroundcolor

#pragma mark  4、UILabel(标签)显示文本的控件,UIView的子类

//    要显示的文本内容:label.text = @“?用户名”;

//    ?本内容的颜色:label.textColor = [UIColor redColor];

//    ?本的对齐方式(水平?向):label.textAlignment = NSTextAlignmentLeft;

//    文本字体及字体大小:label.font = [UIFont fontWithName:@“Helvetica-Bold” size:20];

//    行数:label.numberOfLines = 3;//设置为0时,会自动换行

//    断行模式label.lineBreakMode = NSLineBreakByWordWrapping;//以单词为单位换?

//    阴影颜色:label.shadowColor = [UIColor yellowColor];//阴影阴影

//    阴影?小:label.shadowOffset = CGSizeMake(2,1);//阴影向x正方向偏移2,向y正方向偏移1。

#pragma mark  5、UITextField(输入框)

//    UITextField(输入框):是控制文本输入和显示的控件

//    占位字符串(没有任何输入时,给出的提示字符串):textField.placeholder = @“请输?入?用户名”;

//    是否允许输?:textField.enabled =NO;//不允许输入,不弹出键盘textField.enabled =YES;//默认是YES。允许输入

//    是否开始输入的时候清空输入框内容:textField.clearsOnBeginEditing = YES;//清空textField.clearsOnBeginEditing = NO;//不清空

//    是否?字以圆点格式显示:textField.secureTextEntry = YES;//密码模式textField.secureTextEntry = NO;//普通模式

//    弹出键盘的类型(枚举值)textField.keyboardType = UIKeyboardTypeNumberPad; //数字键盘

//    键盘右下角return按钮类型(枚举值):textField.returnKeyType = UIReturnKeyNext;

//    自定义输入视图(默认是键盘)textField.inputView = myInputView;

//    输入视图上方的辅助视图(默认nil):textField.inputAccessoryView = myAccessoryView;

//    边框样式(枚举值)textField.borderStyle = UITextBorderStyleRoundedRect;

//    清除按钮模式(枚举值)textField.clearButtonMode = UITextFieldViewModeAlways; //总是显示清除按钮(一次性删除输入的内容)

//    输?框左视图textField.leftView = leftView;

//    左视图的显示模式左视图的显示模式textField.leftViewMode = UITextFieldViewModeAlways; //总是显示左视图

//    输入框右视图textField.rightView = rightView;

//    右视图的显示模式textField.rightViewMode = UITextFieldViewModeAlways;

//    设置背景图片 text.background = [UIImage imageNamed:@"dd.png"];

//    设置背景text.disabledBackground = [UIImage imageNamed:@"cc.png"];

//    是否纠错text.autocorrectionType = UITextAutocorrectionTypeNo;

//    再次编辑就清空  text.clearsOnBeginEditing = YES;

//    设置为YES时文本会自动缩小以适应文本窗口大小.默认是保持原来大小,而让长文本滚动 textFied.adjustsFontSizeToFitWidth = YES;

//    首字母是否大写  text.autocapitalizationType = UITextAutocapitalizationTypeNone;

//    代理实现textFieldShouldReturn:方法。

#pragma mark  6、UIButton(按钮)

//    UIButton(按钮):是响应用户点击的控件。UIButton:UIControl:UIView

//    为按钮添加事件,指定按钮点击之后,执行target的action方法 [loginButton addTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchUpIn side];

//    移除按钮的点击事件[loginButton removeTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchUpIn side];

//    设置指定状态下的前景图片:setImage:forState:

//    设置指定状态下的标题背景颜色图片:setBackgroundimage:forState

//    定义按钮标题字体格式:[button.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];

#pragma mark  7、自定义视图

//根据需求使用已学的基础控件组合创建继承与UIView的类,在类的初始化方法中添加子视图,在类的.h文件中提供一些借口(方法),便于外界操作子视图

#pragma mark  8、视图控制器、MVC设计模式

//    UIViewController:视图控制器

//    功能:控制视图?大?小变换、布局视图、响应事件。检测以及处理内存警告。检测以及处理屏幕旋转。检测视图的切换。

//    MVC是一个框架级的设计模式,M是Model,主要?于建立数据模型(即数据的结构);V是View,我们能看到的所有控件都是view,view主要的功能是展示数据;C是控制器,主要是控制M和V的通信。

#pragma mark  9、检测屏幕旋转//////http://www.cnblogs.com/seesea125/archive/2013/06/02/3114199.html

//     如果是在rootViewController中添加了方向控制,则他的子视图都默认继承rootViewController的方向控制。

//     1、设置设备支持旋转的?方向

/*-(NSUInteger)supportedInterfaceOrientations

{

NSLog(@"支持旋转");

return UIInterfaceOrientationMaskAll;

}*/

//       2、暂停?音乐、关闭视图交互等

/*    -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

{

self.rootView.userInteractionEnabled = NO;

NSLog(@"------将要旋转");

}*/

//      3、添加?自定义动画

/*-(void)willAnimateRotationToInterfaceOrientation:duration:*/

//      4、完成旋转(打开交互)

/*-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

{

self.rootView.userInteractionEnabled = YES;

NSLog(@"-------完成旋转");

}*/

//      5、[UIApplication shareApplication].statusBarOrientation提供设备 当前?方向。

#pragma mark   10、处理内存警告/////http://justsee.iteye.com/blog/1820588

/*- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

if ([self isViewLoaded] ==YES && self.view.window == nil) {

self.view = nil;

NSLog(@"内存警告!");

}

// Dispose of any resources that can be recreated.

}*/

#pragma mark  11、容器试图控制器

/*     页面即将展开的时候,揭开画布

-(void)viewWillAppear:(BOOL)animated

{

}

//    #pragma mark 页面完全展开以后

//完成揭画布

-(void)viewDidAppear:(BOOL)animated

{

}

//     页面即将消失

-(void)viewWillDisappear:(BOOL)animated

{

}

//     页面已经消失的时候

-(void)viewDidDisappear:(BOOL)animated

{

}*/

#pragma mark   12、UIEvent:事件:触摸事件、晃动事件、远程控制事件

//    UIEvent:事件。由硬件捕捉到的一个表示用户操作设备的对象

//    为实现多点触摸,首先设置view的属性multipleTouchEnabled = YES(注意了。。。默认值是NO);

//    实现触摸相关的方法:touches..began、touches..moved、touches...ended、 touches..canceled。均无返回值。

//    UITouch初始化:UITouch *touch = [touches anyObject];

#pragma mark   13、响应者链/////http://my.oschina.net/hmj/blog/108002

//    响应者链:由多个响应者对象组成的链

//    UIResponder。响应者类。

//    硬件检测到触摸操作,会将信息交给UIApplication,开始检测。检测顺序:UIApplication -> window -> viewController -> view -> 检测所有?子 视图,最终确认触碰位置,完成响应者链的查询过程,事件处理的顺序与触摸检测查询相反。

//    iOS使用hit-testing寻找触摸的view。 Hit-Testing通过检查触摸点是否在关联的view边界内,如果在,则递归地(recursively)检查该view的所有子view。在层级上处于lowest(我理解就是离用户最近的view)且边界范围包含触摸点的view成为hit-test view。确定hit-test view后,它传递触摸事件给该view。

//    响应者链可以被打断。无法完成检测查询过程。视图类的属性 : userInteractionEnabled。关闭后能阻断查询过程。默认关闭响应交互的类有:UILabel、UIImageView

#pragma mark    14、设计模式:target/action设计模式、delegate模式(代理设计模式)

//    耦合是衡量模块与模块之间关联程度的指标,“高内聚。低耦合”是面向对象编程的核心思想。

//    target/action设计模式模式的劣势:每个视图的点击事件都不一样,如何处理?无法预知视图点击之后要实现的效果,因此在类内写好点击事件不科学也不全面

//    delegate模式:当不明确一个类的某些功能,又不确定谁来实现这些功能的时候,可以使用委托模式,目的就是为了降低类之间的耦合性。

#pragma mark    15、UIImageView

//    创建动态图

/*

NSMutableArray *array2 = [NSMutableArray array];

for (int i = 11; i <= 21; i++) {

UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.tiff",i]];

[array2 addObject:image];

}

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 20, 320, 180)];

imageView.animationImages =array2;

imageView.animationDuration = 1.5f;

[imageView startAnimating];

[self addSubview:imageView];

[imageView release];*/

#pragma mark    16、手势识别器:

//    手势识别器是对触摸事件做了封装,我们无需去判断某个手势是否触发,手势识别器本身起到了识别的作用,我们把重心放在识别手势之后要做什么操作上面。根据需要使用特定手势识别器创建对象,使用initwithTarget:action:方法。

//    1.  轻拍手势

/*UITapGestureRecognizer *tapGP = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGRAction)];

tapGP.numberOfTapsRequired = 2;

[self.rootView.aView addGestureRecognizer:tapGP];*/

//    2. 长按手势

//    UILongPressGestureRecognizer

//    3.旋转手势

//    UIRotationGestureRecognizer

//    4.捏合手势

//    UIPinchGestureRecognizer

//    5.平移手势

//    UIPanGestureRecognizer

//    6.轻扫手势,,,需要设置旋转的角度

//    UISwipeGestureRecognizer

//    7.边缘轻扫手势 ,是iOS7中新增的手势,默认是从屏幕右向左轻扫,如果要改轻扫的方向,可以通过修改参数edges实现

//    UIScreenEdgePanGestureRecognizer

#pragma mark    17、view的transform属性(view的缩放、旋转、平移).....不太懂,查资料

//    transform是view的一个重要属性,它在矩阵层面上改变view 的显示状态,能实现view的缩放、旋转、平移等等功能。

#pragma  mark    18、UISegmentedControl(分段控件,按钮栏)http://www.cnblogs.com/top5/archive/2012/05/17/2506618.html

//    自己的初始化方法:UISegmentedControl *segmentedControl = [[UISegmentedControlalloc]initWithItems:segmentedArray];//因为title是一系列的字符串,因此放在数组里

//    设置默认选择项索引:segmentedControl.selectedSegmentIndex = 2;

//    设置样式:segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;

//    设置指定索引的图片:[segmentedControl setImage:[UIImage imageNamed:@"btn_jyy.png"] forSegmentAtIndex:3];  //设置文字同理

//    在指定索引插入一个选项并设置图片:[segmentedControl insertSegmentWithImage:[UIImage imageNamed:@"mei.png"] atIndex:2 animated:NO];

//    设置指定索引选项的宽度:[segmentedControl setWidth:70.0 forSegmentAtIndex:2];

//    添加委托方法:[mySegmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];//实现方法中可以使用if语句或者swith语句判断

//    设置在点击后是否恢复原样:segmentedControl.momentary = YES;

//    例:在导航栏中添加UISegmentedControl

//自定义UISegmentedcontrol

/*

UISegmentedControl *segmentedControl=[[UISegmentedControl alloc] initWithFrame:CGRectMake(80.0f, 8.0f, 200.0f, 30.0f) ];

[segmentedControl insertSegmentWithTitle:@"Food to eat" atIndex:0 animated:YES];

[segmentedControl insertSegmentWithTitle:@"Food to avoid" atIndex:1 animated:YES];

segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;

segmentedControl.momentary = YES;

segmentedControl.multipleTouchEnabled=NO;

[segmentedControl addTarget:self action:@selector(Selectbutton:) forControlEvents:UIControlEventValueChanged];

UIBarButtonItem *segButton = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];  //自定义UIBarButtonItem,封装定义好的UIsegmented。

[segmentedControl release];

self.navigationItem.rightBarButtonItem = segButton;  //添加到导航栏中

[segButton release];*/

#pragma mark    19、UISlider(滑块控件):UIControl http://www.cnblogs.com/top5/archive/2012/05/17/2506621.html

//    slider.minimumValue = 0;//指定可变最小值

//    slider.maximumValue = 100;//指定可变最大值

//    slider.value = 50;//指定初始值

//    minimumTrackTinkColor //定义划过区域的颜色

//    [slider addTarget:self action:@selector(updateValue:) forControlEvents:UIControlEventValueChanged];//设置响应事件

//    设置UISlider的样式见链接

#pragma mark     20、模态控制

//    通过presentViewController指定当前的控制器,实现页面的跳转

//    YQSecondController *controller2 = [[YQSecondController alloc]init];

//    [self presentViewController:controller2 animated:NO completion:nil];

#pragma mark     21、UISwitch(开关)

#pragma mark     22、UIStepper

#pragma mark     23、UIScrollView(可以滚动的View)

//    UIScrollView是所有滚动视图的基类。

//    UIScrollview主要专长于两个方面:1.滚动:contentSize?于frame.size的时候,能够滚动。缩放:?带缩放,可以指定缩放倍数。

//    contentSize //定义内容区域?小,决定是否能够滑动

//    contentOffset //视图左上?角距离坐标原点的偏移量

//    pagingEnabled //是否整屏翻动

//    bounces //边界是否回弹

//    scrollEnabled //是否能够滚动

//    minimumZoomScale // 缩?小的最?小?比例

//    maximumZoomScale //放?大的最?大?比例

//    zoomScale//设置变化?比例

//    zooming//判断缩放的时候是否会反弹

//    bouncesZoom//控制缩放的时候是否会反弹

//    要实现缩放,还需要实现delegate,指定缩放的视图是谁。

//    UIScrollView滚动代理方法

//    滚动就会触发:- (void)scrollViewDidScroll:(UIScrollView *)scrollView

//    开始拖拽时触发:- (void)scrollViewWillBeginDragging:

//    (UIScrollView *)scrollView

//    结束拖拽时触发:- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView  willDecelerate:(BOOL)decelerate

//    开始减速时触发:- (void)scrollViewWillBeginDecelerating:

//    (UIScrollView *)scrollView

//    结束减速时触发(停?止时)- (void)scrollViewDidEndDecelerating:

//    (UIScrollView *)scrollView

//    完成放大缩小触发:- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale

//    指定某个UIScrollView的子视图可以被放大缩小:- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

#pragma mark    24、UIScrollView设置首次登陆时浏览图片(引导页)

//    添加在AppDelegate.m文件中

/*

-(void)addFollowView

{

if ([[NSUserDefaults standardUserDefaults]boolForKey:@"flag"] == NO) {

[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"flag"];

UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds];

scrollView.contentSize = CGSizeMake(320*7, [UIScreen mainScreen].bounds.size.height);

scrollView.pagingEnabled = YES;

[self.window addSubview:scrollView];

for (int i = 1; i < 8; i++) {

UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i]]];

imageView.frame = CGRectMake(320*(i-1), 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);

[scrollView addSubview:imageView];

if (i == 7) {

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];

button.backgroundColor = [UIColor blueColor];

button.frame = CGRectMake(100, 400, 120, 45);

[button setTitle:@"点击我进入应用" forState:UIControlStateNormal];

[button addTarget:self action:@selector(buttonDidClicked:) forControlEvents:UIControlEventTouchUpInside];

imageView.userInteractionEnabled = YES;

[imageView addSubview:button];

}

[imageView release];

}

[scrollView release];

}else{

YQRootController *rootVc = [[YQRootController alloc]init];

self.window.rootViewController = rootVc;

[rootVc release];

}

}

-(void)buttonDidClicked:(UIButton *)sender

{

YQRootController *rootVc = [[YQRootController alloc]init];

self.window.rootViewController = rootVc;

[rootVc release];

}*/

#pragma mark    25、UIPageControl(指示当前的页码)

//    所以可以像button?一样添加事件,只不过事件触发使?用的不是 UIControlEventsTouchUpInside?是 UIControlEventsValueChanged。

//    通常在Scrollview滚动的时候修改pageControl的currentPage

#pragma mark     26、UINavigationController(导航控制器)

//    导航栏控制器可以认为是管理控制器的控制器,主要管理有层级关系的控制器。

//    UINavigationController继承与UIViewController,以栈的方式管理所控制的视图控制器,至少要有一个被管理的视图控制器,这个控制器我们称作:导航控制器的根视图控制器。任何继承自UIViewController的类(多态)口可以作为根控制器。

//    pushViewController:animated //进入下一个视图控制器

//    popViewController:Animated: //返回上一个视图控制器

//    popToViewController:animated //返回到指定的视图控制器

//    popToRootViewController:Animated //返回到根视图控制器

#pragma mark    27、navigationBar(导航条)

//    navigationBar在iOS7之后默认是透明的,iOS之前默认是不透明的。

//    navigationBar在透明的情况下,与contentView会重合一部分区域。

//    navigationBar在不透明的情况下,contentView跟在navigationBar的下面。

//    navigationBar竖屏下默认高度是44,横屏默认高度是32.

//    设置导航条的方法:barTintColor //setBackgroundImage:forBarMetrics:

//    每个视图控制器都有一个navigationItem属性。navigationItem中设置的左按钮(leftBarButtonItem)、右按钮(rightBarButtonItem)、标题(titleView)等,会随着控制器的显示也显示到navigationItem上。

//    UIBarButtonItem属于MVC的M。定义了UINavigationItem上按钮的触发事件,外观等。

//    初始化方法包括:-initWithTitle:style:target:action://///-initWithBarButtonSystemItem:target:action://////-initWithImage:style:target:action:等

#pragma mark    28、界面间传值(属性传值、代理传值)

//    查看Lesson8_class

#pragma mark     29、UITableView:UIScrollView 参考:http://www.cnblogs.com/kenshincui/p/3931948.html(基础应用),,cell的重布局:直接向cell的contentView上面添加subView、、、:从UITableViewCell派生一个类可参考:http://www.cnblogs.com/smileEvday/archive/2012/06/28/tableView.html

时间: 2024-10-13 04:33:10

UI学习阶段性小结的相关文章

OC学习阶段性小结

/*一.1.OC是一门面向对象的语言.扩展了标准C语言的类与接口.OC能完成的操作:定义新的类.类的实例和方法.方法调用(成为发消息).属性声明(以及通过他们自动合成存取方法).静态和动态类型化.块(block)已封装的 可在任何时候执行的多段代码.基本语言的扩展,例如协议和类别. 2.面向对象编程也叫做面向接口编程,简称:OOP(Object Oriented Programming). 3.类和对象是面向对象的核心. 4.类:具有相同特征和行为的事物的抽象. 5.面向对象的三大特征:封装.继

Ofbiz项目学习——阶段性小结——服务返回结果

一.返回成功 1.在.DispatcherReturnDemoService类中编写服务[returnSuccess],内容如下: /** * 返回成功结果 * @param dctx * @param context * @return */ public static Map<String,Object> returnSuccess( DispatchContext dctx, Map<String,Object> context ){ //填写服务执行的代码 //......

Ofbiz项目学习——阶段性小结——删除数据

一.根据主键进行删除 /** * 按主键进行删除 * @param dctx * @param context * @return */ public static Map<String,Object> deleteUomByPrimaryKey( DispatchContext dctx, Map<String,Object> context){ //取得实体引擎实例 GenericDelegator delegator = dctx.getDelegator(); //TODO

UI学习三天小结

8.29 UI学习第一天 日报 8.30 UI学习第二天 日报 1.今天学习了TextField的leftView和rightView属性,便利用重写TextField中的rightViewRectForBounds方法对昨天完成的部分进行添加密码可视化的功能,首先添加"小眼睛"UIButton,点击触发TextField的secureTextEntry属性从YES变成NO的事件.利用重写的方法改变小眼睛在textField中的位置,使其更好看一点. 2.学习了手势识别,通过判断手势来

Android UI学习 - ListView (android.R.layout.simple_list_item_1是个什么东西)

Android UI学习 - ListView 2010-06-20 18:21:35 标签:Android UI 移动开发 ListView ListActivity 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://android.blog.51cto.com/268543/336162 ListActivity ListActivity是一个专门显示ListView的Activity类,它内置了ListView对象,只要我

UI学习第二篇 (控件)

UIbutton 也是一个控件,它属于UIControl 用的最多的就是事件响应 1. //创建按钮对象 UIButton * _botton = [UIButton buttonWithType:UIButtonTypeCustom]; //设置标题 [_botton setTitle:@"按住说话" forstate:UIControlStateNormal]; [_botton setTitle:@"松开说话" forstate:UIControlStateH

UI学习笔记---第一天

一.iOS概述 iOS是Apple公司的移动操作系统,主要?用于iPhone.iPad.iPad Mini.iPod Touch等移动产品. 借助iOS,我们可以开发视频类.美图类.新闻类.?音乐类.团购类.电商类.阅读类.出?行类.?生活服务类.游戏类等应?用程序. 除此之外,iOS还可以与外部设备通信,开发出更多改变?活的产品,?比 如:智能家居(iOS App控制电视.空调等).健?产品(将人体健康 状况通过App直观的展现出来)等. 二.UI概述 UI(User Interface):?

UI学习笔记---第十四天数据持久化

一.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内斗放在了统一的文件夹目录下 沙盘路径的位置 1. 通过Finder查找程序沙盘相对路径 ~/Library/Application Support/iPhone Simulator 2. 通过代码查找程序沙盘相对路径 NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearc

UI学习框架图

一.UI学习完整体系图(1) 二.UI学习体系图(2)