废话不多说,直接上干货
---------------------------------------------------------------------
(1)
一、main.m
1、main函数,程序唯一的入口
2、UIApplicationMain函数函数作用
1)创建一个应用程序UIApplication对象,他是应用程序的象征,一个UIApplication对象就代表一个应用程序
2)指定谁管理应用程序的生命周期
2)建立一个事件循环来捕捉处理用户的行为
3、永远不用尝试改变main.m中的内容
二、程序的生命周期
1、UIApplication对象实例化后,程序启动时首先会调用该方法
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2、当应用程序将要进入非活动状态执行,比如来电话了、锁屏等。
- (void)applicationWillResignActive:(UIApplication *)application
3、当应用程序进入活动状态执行,这个刚好跟上面那个方法相反
- (void)applicationDidBecomeActive:(UIApplication *)application
4、一般程序进入后台,就会进入非活跃状态,但如果你的程序支持后台,程序在后台也保持活跃状态
- (void)applicationDidEnterBackground:(UIApplication *)application
5、程序进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application
6、当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作
- (void)applicationWillTerminate:(UIApplication *)application
7、找到info.plist文件,添加Application does not run in background,并设置YES,使应用不支持后台操作,一旦退到后台程序就退出
8、练习
验证应用程序的声明周期
三、UIWindow
1、在iOS中,使用窗口与试图在屏幕上显示应用程序的内容,窗口本身不具有任何可见的内容,但他对于应用程序的试图提供一个基本的容器,试图定义你想要的一些内容,例如:图像、文本、表格等等
2、程序中每个时刻只能有一个UIWindow是keyWindow,通常应用程序只有一个window
3、iOS程序启动完毕后,会首先创建一个UIWindow
4、一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow,也就是说没有UIWindow,就看不见任何UI界面
5、常用方法
1)让当前UIWindow变成keyWindow(主窗口)
- (void)makeKeyWindow;
2)让主窗口显示出来
- (void)makeKeyAndVisible;
6、练习
自己创建一个window作为主窗口
四、程序的完整启动过程
1、main函数
2、UIApplicationMain
1)创建UIApplication对象
2)创建UIApplication的delegate对象
3、delegate对象开始处理(监听)系统事件
1)程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
2)在application:didFinishLaunchingWithOptions:中创建UIWindow
3)创建和设置UIWindow的rootViewController
4)显示窗口
五、手机屏幕的几个概念
1、UIScreen
可以充当iOS物理屏幕的替代者,
[UIScreen mainScreen] bounds] 能够获取屏幕大小
2、屏幕尺寸
指具体的屏幕物理长度,以屏幕的对角线的长度作为试试
3、像素
图像由一个个点组成,这个点叫做像素
4、屏幕分辨率
指屏幕屏幕上总共的物理像素点
5、屏幕尺寸
设备 屏幕尺寸 分辨率(pt) reader 分辨率(px)
3GS 3.5 320*480 @1x 320*480
4/4S 3.5 320*480 @2x 640*960
5/5S/5C 4.0 320*568 @2x 750*134
6 4.7 375*667 @2x 750*1334
6P 5.5 414*736 @3x 1242*2208
pt: 用于计算屏幕上的坐标
六、iOS坐标系统
1、iPhone的试图坐标系是以左上角为原点
2、每一个view的frame所使用的坐标系以它的父试图的左上角为原点
3、试图结构和相关函数
//试图显示的位置
CGPoint point = CGPointMake(x,y)
//试图显示的大小
CGSize size = CGSizeMake(width,height)
//试图显示的位置和大小
CGRect rect = CGRectMake(x,y,width,height);
4、frame/Bounds/center
frame: 包含试图的位置和大小
Bounds:包含试图的大小,位置默认是(0,0)
center:包含试图中心点所在的位置
(2)
一、UIViwe基本概念
1、iPhone上看到的控件大部分都是UIView的子类
2、UIView的三个作用
布局、动画、事件传递
二、UIView的常用方法
UIKit是一个提供了在iOS上实现图形,事件驱动程序的框架,能看到的到的试图都在UIKit框架中
UIView是视图的基类
1、 基本的添加和删除
// 添加子视图
addSubview:
// 视图插入到指定索引位置
insertSubview:atIndex:
// 视图插入指定视图之上
insertSubview:aboveSubview:
// 视图插入指定视图之下
insertSubview:belowSubview:
// 把视图移动到最顶层
bringSubviewToFront:
// 把视图移动到最底层
sendSubviewToBack:
//把两个索引对应的视图调换位置
exchangeSubviewAtIndex:withSubviewAtIndex
// 把视图从父视图中移除
removeFromSuperview
2、查找试图
viewWithTag
subViews
3、常用属性
alpha 透明度
backgroundColor 背景颜色
subViews 子视图集合
hidden 是否隐藏
//标签值
tag
//父视图
superview
//是否响应触摸事件
userInteractionEnabled
4、坐标系统变换
在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度
1、CGAffineTransformScale 对视图比例缩放
2、CGAffineTransformRotate 对视图做变焦旋转
3、CGAffineTransformTranslate 对视图在原来的位置上做平移
5、动画
开始动画,将改变属性的代码放在开始和提交之前
[UIView beginAnimations:nil context:nil]
提交动画
[UIView commitAnimations]之间
当动画即将开始时执行
+ (void)setAnimationWillStartSelector:(SEL)selector 执行delegate对象的selector
当动画结束时执行
+(void)setAnimationDidStopSelector:(SEL)selector
动画的持续时间,秒为单位
+ (void)setAnimationDuration:(NSTimeInterval)duration
动画延迟delay秒后再开始
+ (void)setAnimationDelay:(NSTimeInterval)delay
动画的开始时间,默认为now
+ (void)setAnimationStartDate:(NSDate *)startDate
动画的重复次数
+ (void)setAnimationRepeatCount:(float)repeatCount
如果设置为YES,代表动画每次重复执行的效果会跟上一次相反
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses
(3)
一、UIViewController的基本概念
1、见名知意,试图控制器
3、每个试图控制器都自带一个试图,并且负责这个试图相关的一切事务
4、对于iOS应用程序来说,每一个页面都是都是一个控制器,通过切换不同的控制器,来实现切换不同的界面
4、在MVC体系中负责Model与View的通信
5、检测设备旋转以及内存警告
想要App支持某个方向,需要两个设置:
1) Deployment Info 中,勾选 Device Orientation
2) 在控制器中,重写 supportedInterfaceOrientations 方法。(如不重写,IPad 默认是UIInterfaceorientationMaskAll , IPhone 默认是 UIInterfaceOrientationMaskAllButUpsideDown )
模拟器模拟内存警告
选中模拟器->hardware->simulate memory warning
6、UIViewController是所有试图控制器类的基类,定义了试图控制器的基本功能
二、UIViewController的生命周期
0、每次访问控制器的view,view是nil的话就会自动调用该方法,如果重写在这个方法内必须给控制器设置一个根试图,如果不给的话程序就会无限循环直到程序奔溃
loadView
1、控制器的View加载完毕
viewDidLoad
2、View即将显示到window上
viewWillAppear
3、view显示完毕
viewDidAppear
4、View即将从window上移除
viewWillDisappear
5、view从window上移除完毕
viewDidDisappear
6、view即将销毁的时候调用
viewWillUnload
7、view销毁完毕的时候调用
viewDidUnload
8、当接收到内存警告的时候
didReceiveMemoryWarning
9、具体流程查看课件中的图片
五、模态试图的使用
1、模态视图不是专门的某个类,而是通过视图控制器的presentModalViewController:方法弹出的视图我们都称为模态视图
2、模态视图出现的场景一般是临时弹出的窗口,譬如:登陆窗口
3、通过设置将要弹出控制器的modalTransitionStyle属性设置不同的动画效果
3、弹出,
presentModalViewController:
4、取消:
dismissModalViewControllerAnimated: 方法关闭窗口
UIControl的事件
1、UIControlEventTouchDown
单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。
2、UIControlEventTouchDownRepeat
多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。
3、UIControlEventTouchDragInside
当一次触摸在控件窗口内拖动时。
4、当一次触摸在控件窗口之外拖动时
UIControlEventTouchDragOutside
5、当一次触摸从控件窗口之外拖动到内部时
UIControlEventTouchDragEnter
6、当一次触摸从控件窗口内部拖动到外部时
UIControlEventTouchDragExit
7、所有在控件之内触摸抬起事件
UIControlEventTouchUpInside
9、点击手指抬起时
UIControlEventTouchUpInside
10、所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。
UIControlEventTouchCancel
(3)
一、UINavigationController(导航控制器)
1、基本概念
1)继承于UIViewControler
2)相当于一个容器用来管理有层级关系的控制器
3)采用栈的方式管理所有controller,每个controller管理各自的试图。
栈:
向栈中添加一个对象的操作称为入栈
在栈中删除一个对象的操作称为出栈
第一个入栈的对象叫做基栈
最后一个入栈的对象,叫做栈顶
当前显示的试图控制器,即为栈顶。
对象出栈、入栈的方式:后进先出,先进后出
4)提供返回上一级controller的默认button和方法
5)创建时要给导航控制器设置根控制器
2、结构,包含三个部分
1)navigationBar
2) 内容试图
3)toolBar,因为不常用,默认是隐藏的
3、常用属性和方法
属性
1)获取到在栈中最顶层的试图控制器
topViewController
2)获取到在栈中当前显示的试图控制器
visibleViewController
3)在栈中当前有的试图控制器
viewControllers
4)隐藏导航栏
navigationBarHidden
5)获取到导航栏
navigationBar
方法
1)初始化一个根视图控制器,在栈的最底层
initWithRootViewController:(UIViewController *)rootViewController;
2)往栈中压入一个新的控制器
pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
3)移除栈顶的一个控制器
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
4)弹出到指定的视图控制器中,返回的数组代表要出栈中移除的对象
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
5)回到根视图控制器
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
二、练习
在第二个视图控制器在添加一个UIButton实例,单击该按钮时,压入一个新的视图控制器。在该视图中添加四个按钮,依次实现,
1、压入一个新的视图控制器;
2、返回上一个视图控制器;
3、返回根视图控制器;
4、返回指定的视图控制器
三、UINavigationBar(导航栏)
1、基本概念
1)和导航控制器一样,是一个容器,用来显示导航栏上的试图,
2) 竖屏44 横屏32
2、配置外观
1) 设置导航栏样式
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
2)设置导航栏是否透明,设为不透明能够屏蔽导航栏对试图frame的影响
self.navigationController.navigationBar.translucent = NO;
1) 配置背景颜色
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
2)配置背景图片
self.navigationController.navigationBar setBackgroundImage: forBarMetrics:
3) 改变导航栏上默认按钮颜色
self.navigationBar.tintColor
3、配置内容
1)每个controller都有专属的navigationItem
1)通过配置不同控制器的navigationItem让不同控制器的导航栏显示不同的内容
2)navigationItem的常用属性
leftBarButtonItem
rightBarButtonItem
backBarButtonItem
title
titleView
3) backBarButtonItem是由上一层控制器控制的
4) 导航栏的prompt属性,通过navigationItem来设置,其主要作用是用于提示用户。比如,用户正在请求网络数据时,提示用户数据正在加载。待加载完成后可以将它的值设置为nil,取消显示。
四、练习
将自己项目的注册按钮放到右上角,修改系统自带的返回按钮
(4)
一、分栏控制器的基本概念
1、UITabBarController和UINavigationController一样是用来管理试图控制器的
2、与导航控制器不同,tab控制器使用数组管理子试图控制器的,并且子试图之间是平等关系,导航控制器所管理的试图控制器之间上
练习:
1、创建若干个子视图控制器(它们是并列的关系)
2、创建一个数组,将已创建的子视图控制器,添加到数组中
3、创建UITabBarController实例
4、tabBarController.viewControllers = viewControllers;
5、添加到window的rootViewController中
二、分栏试图控制器的结构
1、有两部分组成
1)contentView:显示当前controller的view
2) tabBar(标签栏):负责切换显示controller, 高度为49
2、tabBar
1) 标签栏是唯一的,就好比导航控制器的导航栏
2) 设置分栏的颜色
barTintColor
3) 设置分栏的背景图片
backgroundImage
4)标签栏的显示与隐藏
hidden
5)设置导航控制器默认显示的控制器
selectedIndex
3、tabBarItem
1) 用来控制一组控制器的切换,类似选项卡,每个Tab控制一个试图控制器,点击哪个tab就显示对应的试图控制器,当前的试图控制器
2) 每个tabBarItem都可以设置title、image/selectedImages、badgeValue
3) 设置选中的颜色
分栏控制器.tabBar.tintColor
3) TabBar只能显示五个tab Item,如果超过五个则会自动生成个Morede 标签显示剩余的Tab,这些Tab可以通过编辑显示在UITabBar上
4) 自定义Item
[UITabBarItem alloc]initWithTitle: image: tag:
[UITabBarItem alloc]initWithTabBarSystemItem:tag:
3、支持国际化
1)找到plist文件
2)右键 add row
3)Localizations 默认就一个ENGLISH
4)在 添加一个 Item 1 Chinese (simplified)
练习:
1、初始化我们需要在tabBarController中显示的视图控制器
2、初始化UItabBarItem
3、在子视图控制器中添加UItabBarItem
4、我们将子视图控制器放入数组中
5、初始化tabBarcontroller
6、将数组放入tabBar控制器中,方法viewControllers
三、代理监听分栏控制器的切换
1、视图将要切换时调用,viewController为将要显示的控制器,如果返回的值为NO,则无法点击其它分栏了
- (BOOL)tabBarController:(UITabBarController *)tabBarControllershouldSelectViewController:(UIViewController *)viewController
2、视图已经切换后调用,viewController 是已经显示的控制器
- (void)tabBarController:(UITabBarController *)tabBarControllerdidSelectViewController:(UIViewController *)viewController
3、将要开始自定义item的顺序
- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers
4、将要结束自定义item的顺序
- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed
5、结束自定义item的顺序
- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed
四、集成分栏控制器和导航控制器
1、在Tab Bar控制器中某一个Tab中使用Navigation控制器,这是最常见的用法,我们将在下面具体讲解这个用法
2、在一个Navigation控制器控制下的某一个或某些控制器是Tab Bar控制器,这时对该Tab Bar控制器的压入和弹出方法和普通视图控制器一样
五、总结
1、UINavigationController、UITabBarController和UIViewController通常都是组合出现的,一定要熟练使用
2、UINavigationController、UITabBarController都是UIViewController的子类,管理的都是UIViewContrller
3、UINavigationController可以嵌套UITabBarController
4、UITabBarController可以嵌套UINavigationController
(5)
一、表视图的介绍
1、表视图,是iOS中最重要的试图,很多应用程序都会使用到,
2、表试图里面可以放很多行信息
3、表视图的两种风格
1)普通风格
UITableViewStylePlain
2)分组风格
UITableViewStyleGrouped
3)UITableViewStylePlain和UITableViewStyleGrouped。这两者操作起来其实并没有本质区别,只是后者按分组样式显示前者按照普通样式显示而已。
二、表视图的基本结构
1、表视图有表头、表尾、中间一连串单元格试图组成
1)设置表头
tableHeaderView
2)设置单元格试图
UITableViewCell,单元格也可以分段显示,每一段都可以通过代理设置段头和段尾
2)设置表尾
tableFooterView
3) tableView的常用属性和方法
设置表视图分割线风格
@property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;
设置表视图分割线颜色,默认标准灰色
@property(nonatomic,retain) UIColor *separatorColor;
设置表视图的头部视图
@property(nonatomic,retain) UIView *tableHeaderView;
设置表视图的尾部视图
@property(nonatomic,retain) UIView *tableFooterView;
设置表视图单元格的行高
@property(nonatomic) CGFloat rowHeight;
设置表视图背景
@property(nonatomic, readwrite, retain) UIView *backgroundView
刷新表视图单元格中数据
- (void)reloadData;
显示指示条
showsVerticalScrollIndicator
设置表视图section头部行高
@property(nonatomic) CGFloat sectionHeaderHeight;
设置表视图section尾部部行高
@property(nonatomic) CGFloat sectionFooterHeight
三、单元格的显示
1、单元格的位置表示
NSIndexPath:能表示当前cell是tableView的第几段第几行
2、单元格的创建
UITableViewCell * cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
cell的样式
1)UITableViewCellStyleDefault
左侧显示textLabel,imageView显示在最左边
2)UITableViewCellStyleValue1
左侧显示textLabel、右侧显示detailTextLabel,imageView显示在最左边
3)UITableViewCellStyleValue2
左侧依次显示textLabel(默认蓝色)和detailTextLabel,imageView可选
4)UITableViewCellStyleSubtitle
左上方显示textLabel,左下方显示detailTextLabel,imageView显示在最左边
cell的辅助图标 accessoryType
1) 不显示任何图标
UITableViewCellAccessoryNone,
2) 跳转指示图标
UITableViewCellAccessoryDisclosureIndicator
3) 内容详情图标和跳转指示图标
UITableViewCellAccessoryDetailDisclosureButton
4) 勾选图标
UITableViewCellAccessoryCheckmark
5) 内容详情图标
UITableViewCellAccessoryDetailButton
5) 自定义辅助图标
accessoryView属性
3、cell的常用属性
1)设置cell的背景试图
backgroundView
2)设置选中的cellbei的背景图片
selectedBackgroundView
3) 设置选中时的样式
selectionStyle
练习:不分组的名人录
四、数据源方法(UITableViewDatasource)
1、实例化表视图时,必须要实现他的数据源方法,以此来完成表中数据的配置,一般来说数据源方法是用来配置表中的数据
2、常用数据源方法
1)配置section中含有行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
2)创建单元格实例
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
3) 配置表视图section个数,默认为1
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
4)section中的头部视图的标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
5)section中的尾部视图的标题
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
/* 表视图的编辑 移动、删除等 */
6)指定单元格是否支持编辑
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath;
7)指定单元格是否支持移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath*)indexPath;
8)用户编辑了哪一个单元格,在这里执行删除操作
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath;
9)实现此方法,移动单元格
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;
五、代理方法(UITableViewDelegate)
1、一般是处理表视图基本样式(单元格高度)以及捕捉选中单元格事件
2、常用代理方法
1)配置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
2)设置section 头部、尾部视图的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
3)自定义section头部、尾部视图,注意:需要指定高度
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
4)用户单击单元格中辅助按钮时,调用该方法
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;
5)用户单击单元格,调用该方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
6)取消选中单元格时,调用该方法
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0);
7)设置单元格编辑样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;
练习:分组的名字录
1、设置段头、段尾
2、自定义段头段尾
一、表视图常用属性和方法
属性
1、设置表视图分割线风格
@property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;
2、设置表视图分割线颜色,默认标准灰色
@property(nonatomic,retain) UIColor *separatorColor;
3、设置表视图的头部视图
@property(nonatomic,retain) UIView *tableHeaderView;
4、设置表视图的尾部视图
@property(nonatomic,retain) UIView *tableFooterView;
5、设置表视图单元格的行高
@property(nonatomic) CGFloat rowHeight;
6、设置表视图背景
@property(nonatomic, readwrite, retain) UIView *backgroundView
7、刷新表视图单元格中数据
- (void)reloadData;
8、设置表视图section头部行高
@property(nonatomic) CGFloat sectionHeaderHeight;
9、设置表视图section尾部部行高
@property(nonatomic) CGFloat sectionFooterHeight;
10、 刷新表视图section中数据
- (void)reloadSectionIndexTitles
11、默认为NO,不可以编辑,设置时,不存在动画效果
@property(nonatomic,getter=isEditing) BOOL editing;
12、覆盖此方法,存在动画效果
- (void)setEditing:(BOOL)editing animated:(BOOL)animated;
13、默认为YES,当表视图不在编辑时,单元格是否可以选中
@property(nonatomic) BOOL allowsSelection NS_AVAILABLE_IOS(3_0);
14、默认为NO,当表视图在编辑时,单元格是否可以选中
@property(nonatomic) BOOL allowsSelectionDuringEditing;
15、默认为NO,是否可以同时选中多个单元格,注意版本问题
@property(nonatomic) BOOL allowsMultipleSelection
17、 默认为NO,在编辑状态下时,是否可以同时选中多个单元格,注意版本问题
@property(nonatomic) BOOL allowsMultipleSelectionDuringEditing
方法
1、指定一个cell,返回一个NSIndexPath实例,如果cell没有显示,返回nil
- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;
2、指定一个范围,返回一个数组,内容是NSIndexPath实例,指定rect无效,返回nil
- (NSArray *)indexPathsForRowsInRect:(CGRect)rect;
3、指定一个NSIndexPath,返回一个cell实例,如果cell没有显示,返回为nil
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;
4、根据显示的cell,返回一组cell实例的数组,如果没有显示,返回nil
- (NSArray *)visibleCells;
5、根据显示的cell,返回一组NSIndexPath实例的数组,如果没有显示,返回nil
- (NSArray *)indexPathsForVisibleRows;
6、滑动到指定的位置,可以配置动画
- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
7、插入一行cell,指定一个实现动画效果
- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
8、删除一行cell, 指定一个实现动画效果
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
9、刷新一个行cell,指定一个实现动画效果
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
10、移动cell的位置,指定一个实现动画效果
- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath*)newIndexPath NS_AVAILABLE_IOS(5_0);
(6)
-、表视图的编辑状态
1、表视图的编辑状态有两种
insert和delete
2、实现表视图编辑的步骤
1)让tableview处于编辑状态
self.tableView.editing
2)通过代理方法确定tableView处于哪种状态(添加还是删除)
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
3)选择添加或者删除通过代理方法来做不同的处理
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
二、单元格的移动
只需实现两个代理方法
1、实现代理方法,让tableView的单元格支持移动,如果该方法返回为NO,则不支持单元格的移动,该方法一般可省略
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
2、实现代理方法,指定从哪里移到哪里
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
一、谓词的基本概念
cocoa中提供了NSPredicate类,指定过滤器的条件,将符合条件的对象保留下来
二、创建谓词的步骤
1、设置谓词条件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age <= 28"];
2、使用谓词
1) 判断当前对象是满足条件
[predicate evaluateWithObject:id]
2) 将数组中满足条件的内容翻到数组中并返回该数组
[array filteredArrayUsingPredicate:predicate];
三、运算符,谓词中的字符串用单引号括起来
1、逻辑运算符 &&(AND) ||(OR)
[NSPredicate predicateWithFormat:@"age<25 || age>27"];
2、根据关键字查询 IN
[NSPredicate predicateWithFormat:@"name in {'tom-8','jack-3','xxx'}"];
[NSPredicate predicateWithFormat:@"name in %@",inArray];
3、检查某个字是否以**开头 BEGINSWITH
[NSPredicate predicateWithFormat:@"name BEGINSWITH 't' "];
4、检查某个单词是否已**结尾 ENDSWITH
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name ENDSWITH 't' "];
5、是否包含某个字符 CONTAINS
[NSPredicate predicateWithFormat:@"name CONTAINS 'a'"];
6、检查包含某个字符(模糊查询) Like,?和*可作为通配符,其中?匹配1个字符,*匹配0个或者多个字符
[NSPredicate predicateWithFormat:@"name like '??c*'"];
(7)
一、事件
1、在iOS上,事件有多种形式
1)触摸事件
2)运动事件
3)远程控制事件
2、UIView不接收触摸事件的三种情况
1.不接收用户交互
userInteractionEnabled = NO
2.隐藏
hidden = YES
3.透明
alpha = 0.0 ~ 0.01
提示:UIImageView的userInteractionEnabled默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的
二、事件处理基本方法
1、一个或多个手指触碰屏幕
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
2、一个或多个手指在屏幕上移动
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
3、一个或多个手指离开屏幕
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
4、触摸序列被诸如电话呼入这样的系统事件取消
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
三、UITouch触摸对象
当用户触摸屏幕时,事件会被封装成一个event实例,包含了用户触摸的相关信息,event实例中包含着若干个UITouch实例,一个touch代表着用户的一个手指
1、UITouch常用属性
1)window
触摸产生时所处的窗口
2)view
触摸产生时所处的试图
3)tapCount
tap(轻击)操作,和鼠标单独单击操作类似,tapCount表示短时间内轻击屏幕的次数,因此可以根据tapCount判断单击、双击或更多的轻击
双击试图是时单击也会执行的解决方法
if (touch.tapCount == 1) {
//延迟0.5秒执行 runLoop会计算这个时间
[self performSelector:@selector(singleTap) withObject:nil afterDelay:0.5];
}else{
//告诉runLoop取消调用某个延迟的方法
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTap) object:nil];
[self doubleTap];
}
4)timestamp
记录了触摸事件产生或变化时的时间,单位是秒
5)phase
触摸事件在屏幕上有一个周期,即触摸开始、触摸点移动、触摸点结束,还有中途取消,通过phase可以查看当前触摸事件在一个周期中所处的状态,pase是一个枚举,包含:
//触摸开始
UITouchPhaseBegan
//接触点移动
UITouchPhaseMoved
//接触点无移动
UITouchPhaseStationary
//触摸结束
UITouchPhaseEnded
//触摸取消
UITouchPhaseCancelled
2、UITouch常用方法
1)返回一个CGPoint类型的值,表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的
- (CGPoint)locationInView:(UIView *)view
2)该方法记录了前一个坐标值
- (CGPoint)previousLocationInView:(UIView *)view:
一、事件传递
1、从事件发生到其处理的对象,传递要经过特殊的一段过程,当用户点击设备屏幕时,iOS捕捉到一系列的触摸,将其打包到UIEvent对象并放置到应用程序活动事件队列中
2、UIApplication对象从事件队列中取出最前面的事件并将其分发,通常,其将事件发送给应用程序的主窗口-UIWindow实例,再由窗口对象发送事件给第一响应者处理,一般通过touchesBegan方法获取该事件
3、具体过程
1)先将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件
2)调用最合适控件的touches方法
3)如果调用了[super touches...]方法,就会将事件顺着响应者链条往上传递,传递给上一个响应者
4)接着就会调用上一个响应者的touches...方法
二、响应者链
1、基本概念
响应者对象是一个能接受并处理事件的对象,UIResponser是所有响应者对象的基类,该基类定义了一系列编程接口,不但为事件处理进行服务而且还提供了通用的响应行为处理,UIApplication、UIView(UIWindow)、UIViewController都直接或间接的继承自UIResponser,所有的这些类的实例都是响应者对象
响应者链表示一系列的响应者对象,事件被交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者(nextresponder)
2、事件响应者链传递的过程
1、当用户与试图交互时,会将消息传递给试图控制器,如果不存在控制器,传递给父试图
2、如果不处理该消息,则继续将消息向上传递,如果最上层的试图也不处理,将事件交给window对象,最后交由UIApplication实例,如果不处理,丢弃事件
PS:传递方式
[self.nextResponder touchesBegan:touches withEvent:event];
3、通过响应者链传递可以让多个试图响应同一个手势
三、练习
事件的传递演示
四、手势识别器
UIGestureRecognizer类,用于检测、识别用户使用设备时所用的手势,他是一个抽象类,定义了所有手势的基本行为,以下是UIGestureRecognizer子类,用与处理具体的用户手势行为
1、轻击
UITapGestureRecognizer
常用属性
//点击次数
numberOfTapsRequired
//消除两个手势的影响
requireGestureRecognizerToFail
//手指的数量,需将试图的multipleTouchEnabled设为YES
numberOfTouchesRequired
2、轻扫
UISwipeGestureRecognizer
常用属性
清扫方向,默认是右
direction
3、长按
UILongPressGestureRecognizer
常用属性
最小长按时间
minimumPressDuration
注意事项
如果不判断会调用2次 按下2秒后自己调用一次 松开后又要调用一次
if (longPress.state == UIGestureRecognizerStateEnded) {
return;
}
NSLog(@"长按");
4、平移
UIPanGestureRecognizer
常用方法
获取触摸的位置
locationInView
注意事项
- (void)panAction:(UIPanGestureRecognizer *)gesture{
// 1.在view上面挪动的距离 //translationInView表示相对于起点挪动的位置是最新2点之间的间距
CGPoint translation = [gesture translationInView:gesture.view];
CGPoint center = gesture.view.center;
center.x += translation.x;
center.y += translation.y;
gesture.view.center = center;
// 2.清空移动的距离
[gesture setTranslation:CGPointZero inView:gesture.view];
}
5、捏合
UIPinchGestureRecognizer
注意事项:
每次调用过方法后,记得将scale置1,否则你的图片在捏合一点便会变很大或很小
6、旋转
UIRotationGestureRecognizer
注意事项:
每次调用过方法后,记得将rotation置0,否则图片旋转不正常
7、手势识别器的代理方法
/**
* 是否允许多个手势识别器同时有效
* Simultaneously : 同时地
*/
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
8、重要的事情说三遍
实现旋转、缩放、平移的时候一定要清零
实现旋转、缩放、平移的时候一定要清零
实现旋转、缩放、平移的时候一定要清零
(8)
一、滑动试图(UIScrollView)
1、基本概念
1) 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限,当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容
2) 通过scrollView可以通过手势,放大或者缩小显示的内容
2、UIScrollView常用属性
1)里面内容的大小,也就是可以滚动的大小,模式是0,没有滚动效果
contentSize
2)这个属性能够在UIScrollView的4周增加额外的滚动区域
contentInset
3) 这个属性用来表示UIScrollView滚动的位置
contentOffset
4) 默认是 yes,就是滚动超过边界会反弹有反弹回来的效果。假如是 NO,那么滚动到达边界会立刻停止
bounces
5) 是否分页
pagingEnabled
6) 是否可以滚动
scrollEnabled
7) 滚动时是否显示水平滚动条
showsHorizontalScrollIndicator
8) 滚动时是否显示垂直滚动条
showsVerticalScrollIndicator
9) 滚动条的样式,基本只是设置颜色。总共3个颜色:默认、黑、白
indicatorStyle
10) 默认是 NO,可以在垂直和水平方向同时运动。当值是 YES 时,假如一开始是垂直或者是水平运动,那么接下来会锁定另外一个方向的滚动。 假如一开始是对角方向滚动,则不会禁止某个方向
directionalLockEnabled
10) 让指定的区域显示显示出来
scrollRectToVisible:animate
10)当touch后还没有拖动的时候值是YES,否则是NO
tracking
11) 当内容放大到最大或者最小的时候是YES,否则NO
zoomBouncing
12) 当正在缩放的时候值是YES,否则为NO
zooming
13) 当滚动后,手指放开但是还在继续滚动中。这个时候是 YES,其它时候是 NO
decelerating
14) 设置手指放开后的减速率
decelerationRate
15) 一个浮点数,表示能放最大的倍数
maximumZoomScale
16) 一个浮点数,表示能缩最小的倍数
minimumZoomScale
17) 和 bounces 类似,区别在于:这个效果反映在缩放上面,假如缩放超过最大缩放,那么会反弹效果;假如是 NO,则到达最大或者最小的时候立即停止
bouncesZoom
3、UIScrollView代理方法
创建一个UIScrollView,并在里面放置一张图片
1)scrollView已经滑动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
2)视图已经放大或缩小
- (void)scrollViewDidZoom:(UIScrollView *)scrollView;
3)scrollView开始拖动
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
4)scrollView结束拖动
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
5)scrollView开始减速(以下两个方法注意与以上两个方法加以区别)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
6)scrollview减速停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
用法:
if (![scrollView isMemberOfClass:[UITableView class]]) {
int current = scrollView.contentOffset.x / 320;
UIPageControl *pageControl = (UIPageControl *)[self.view viewWithTag:101];
pageControl.currentPage = current;
}
7)返回一个放大或者缩小的视图,要设置最大最小值
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
8)开始放大或者缩小
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
9)缩放结束时
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale;
10)是否支持滑动至顶部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;
11)滑动到顶部时调用该方法
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;
一、利用scrollView实现图片的放大缩小
1、设置最大最小缩放倍率
self.maximumZoomScale = 2.5;
self.minimumZoomScale = 1;
2、指定缩放谁
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
3、双击事件的放大与缩小
- (void)zoomInOrOut:(UITapGestureRecognizer *)tapGesture
{
if (self.zoomScale >= 2.5) {
[self setZoomScale:1 animated:YES];
}else {
CGPoint point = [tapGesture locationInView:self];
[self zoomToRect:CGRectMake(point.x - 40, point.y - 40, 80, 80) animated:YES];
}
}
二、实现类似相册的功能
1、创建一个scrollView,进行配置
2、在scrollView里面放多张能够显示得图片
3、每次翻到下一张图片时要让这上个图片恢复到原比例
int pre = 0;
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int current = scrollView.contentOffset.x / 340;
ImageScrollView *imgScrollView = (ImageScrollView *)[scrollView viewWithTag:pre];
if (imgScrollView.zoomScale > 1) {
imgScrollView.zoomScale = 1;
}
pre = current;
}
(9)
一、UIPickerView(拾取器)的使用 1、UIPickerView控件生成的表格可以提供滚动的轮盘, 2、这些表格表面上类似于标准的UITableView控件,但是他们使用的dataSource和delegate方法有细微的差别二、UIPickerView常用方法 1、获取指定列的行数 - (NSInteger)numberOfRowsInComponent:(NSInteger)component; 2、刷新所有列 - (void)reloadAllComponents; 3、刷新指定的列 - (void)reloadComponent:(NSInteger)component; 4、选择一行 - (void)selectRow:(NSInteger)row inComponent:(NSInteger component animated:(BOOL)animated; 5、获取指定列当前显示的是第几行 - (NSInteger)selectedRowInComponent:(NSInteger)component;三、UIPickerView常用方法 1、dataSource方法 1)返回列数 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 2)返回每一列对应的行数 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 2、delegate方法 1)返回显示的文本 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 2)当某一列选中的行数发生变化时调用 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 3) 设置行高 - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component 4)设置列宽 - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component 5)自定义cell - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view四、练习 1、使用拾取器做城市选择 1)在工程自带的ViewController的viewDidload加入 UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0,self.view.frame.size.height-300, 414, 300)]; pickerView.backgroundColor = [UIColor grayColor]; [self.view addSubview:pickerView]; 运行,什么都没有,因为多少段多少行是通过代理方法来设置的 2)让viewController类遵守两个协议,在viewDidLoad方法里给pickerView挂上代理,并在viewController里实现如下两个代理方法
//返回列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 2;
}
//返回每一列中的行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return 5;
}
运行 选择器里面有两列,每列的数据都是用『?』表示,因为还没有给每列赋值
3)将课件里面的city.plist文件拖到工程中,在viewDidLoad方法里写入如下代码
NSString *path = [[NSBundle mainBundle] pathForResource:@"city" ofType:@"plist"];
//声明一个全局变量dataArray
dataArray = [[NSArray alloc] initWithContentsOfFile:path];
4)将代理方法- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component的内容替换成如下内容
if (component == 0) {
return data.count;
}
NSInteger selectedRow = [pickerView selectedRowInComponent:component];
NSArray *tempArray = data[selectedRow][@"cities"];
return tempArray.count;
运行 目前还是没有数据,但列数和行数已经做了自动设置
5、给每行设置标题,将如下代理方法写入工程
//返回每个item中的title
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
if (component == 0) {//第一列
NSDictionary *dic = data[row];
NSString *state = dic[@"state"];
return state;
}
//返回第一列选择的行的索引
NSInteger selectedRow = [pickerView selectedRowInComponent:0];
//取得省级字典
NSDictionary *items = data[selectedRow];
//取得该省下所有的市
NSArray *cities = [items objectForKey:@"cities"];
NSString *cityName = cities[row];
return cityName;
}
运行 每行有标题 但左边的省份变化,右边的城市列表没有跟着变化
6、实现右侧跟着左侧联动
//当某一列选中的行数发生变化时调用
- (void)pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if (component == 0) {
//刷新指定列中的行
[pickerView reloadComponent:1];
//选择指定的item
[pickerView selectRow:0 inComponent:1 animated:YES];
}
}
运行 右侧可以跟着左侧联动
7、设置列宽和行高,在工程里添加如下代理方法
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
if (component == 0) {
return 100;
}
return 220;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
return 30;
}
8、自定义cell,添加代理方法
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
if (component == 0) {
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
view.backgroundColor = [UIColor greenColor];
return view;
}
UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 220, 40)];
view2.backgroundColor = [UIColor redColor];
return view2;
}
运行 只剩色块,而里面却没有内容了,因为这个代理方法执行- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component代理方法将不会再执行
一、UIDatePicker时间拾取器
1、UIDatePicker提供了时间、日期供用户选择
2、UIDataPicker是对UIPickerView做了进一步封装,其外观布局和UIPickerView完全一样
二、UIDatePicker的常用属性
1、初始化显示的date日期
date
2、设置最小日期
minimumDate
3、设置最大日期
maximumDate
4、设置日期的显示样式
datePickerMode
UIDatePickerModeTime 显示时间
UIDatePickerModeDate 显示日期
UIDatePickerModeDateAndTime 显示日期和时间
UIDatePickerModeCountDownTimer 显示时间
5、分钟间隔值
minuteInterval
三、练习
1、日期选择器
1) 新建工程,在ViewController中的viewDidLoad加入如下代码
UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 736-300, 414, 300)];
datePicker.tag = 100;
//最小时间 10年之前 不设置最小时间将没有限定
datePicker.minimumDate = [NSDate dateWithTimeIntervalSinceNow:-60*60*24*365*10];
datePicker.maximumDate = [NSDate date];
//初始化时间为昨天
datePicker.date = [NSDate dateWithTimeIntervalSinceNow:-60*60*24];
//4种显示样式
datePicker.datePickerMode = UIDatePickerModeDate;
[self.view addSubview:datePicker];
运行 体验一下设置最小时间跟没设置最小时间的区别
2)在viewDidLoad中添加如下代码
UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
button.frame = CGRectMake(100, 100, 50, 50);
[button addTarget:self action:@selector(clickActon) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
3)实现点击事件方法
- (void)clickActon{
UIDatePicker *datePicker = (UIDatePicker *)[self.view viewWithTag:100];
NSDate *date = datePicker.date;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dateString = [dateFormatter stringFromDate:date];
NSLog(@"%@",dateString);
}
运行,查看效果
一、日期类简单介绍
对日期我们经常使用到的两个类
1、NSDate,NSDate的对象表示一个具体的时间点
2、NSDateFormatter对象将时间转化为字符串或者反转
二、创建NSDate对象的几种方式以及区别
1、获取到GTM时间(世界标准时间),比中国时间早八个小时
NSDate *data = [NSDate date];
2、从当前GTM时间往后推八个小时的时间,如果为负数就是往前推八个小时的时间
NSTimeInterval timeInterval = 8*60*60;
NSDate *chinaDate = [NSDate dateWithTimeIntervalSinceNow:timeInterval];
3、从计算机时间(1970-01-01 00:00:00)后推八个小时后的时间。
NSDate *since1970Date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
4、从自定义的时间往后推八个小时后的时间。
NSDate *sinceCustomDate = [NSDate dateWithTimeInterval:timeInterval sinceDate:date];
5、从2001-01-01 00:00:00往后推八个小时后的时间。
NSDate *sinceReferenceDate = [NSDate dateWithTimeIntervalSinceReferenceDate:timeInterval];
6、永远不可能到达的一个点
NSDate *futureDate = [NSDate distantFuture];
7、一个无限过去的时间点
NSDate *pastDate = [NSDate distantPast];
三、NSDate对象常用的方法
1、从计算机时间(1970-01-01 00:00:00)到date时间的时间差(秒为单位)
timeIntervalSince1970
2、从(2001-01-01 00:00:00)到date时间的时间差(秒为单位)
timeIntervalSinceReferenceDate
3、从当前时间到date时间的时间差
timeIntervalSinceNow
4、当前时间偏移多少秒后的新时间
dateByAddingTimeInterval
5、两个日期之间的时间差
timeIntervalSinceDate
6、日期的比较
earlierDate//谁早返回谁
laterDate//谁晚返回谁
isEqualToDate//两个日期是否相等
四、日期与字符串的转换
1、日期格式如下:
y 年
F 月份中的周数
E 周几,EEEE星期几
M 表示 月
m 表示 分
H 表示 24小时制
h 表示 12小时制
s 表示 秒
S 表示 毫秒
d 月份中的天数
a Am/pm
k 一天中的小时数(1-24)
K am/pm 中的小时数(0-11)
H 一天中的小时数
h am/pm 中的小时数(1-12)
2、字符串与日期的转换
1)将日期转换为字符串,转换过后就自动换成系统所在时区的时间
[dateFormatter stringFromDate:date]
2)将字符串转化为日期
[dateFormatter dateFromString:str]
--------------------------------------------------------------------
未完(接UI控件及方法大集合续)