有道云笔记转移

    xiaoxiao2022-06-30  90

    音乐播放器练习项目结构

    2.

    1,xib,storyboard创建编译之后,都会被存入程序的资源之中,NSboundle,跟拖入程序的视频,音频,图片一个样; xib编辑之前是xib,编译之后存入资源了就是nib格式;

    2 horizontal spacing 水平间隔

    3,更新约束快捷键 com+alt+等号; 查看控件间距离快捷键:选中一个控件后 按住Alt,点击其他控件查看; 调出双视图:com+Alt+回车,撤销双视图:com+回车;

    4,xml数据最外层的是数组,数组包着的是一个个的小字典; 可以直接由字典解析出这个数据

    5, duration 一首歌的时间,单位为毫秒; ios的时间单位是秒,安卓的时间单位是毫秒

    6 转换integer类型的id if ( [key iuequaltostring:@“id”] ) {

    self.ID = value;

    }

    7, 宏的命名规则,要么全大写 要么开头k后面用驼峰命名法

    pch文件;在iOS-other中新建;以前自动带有,现在需要手动添加; 在工程里面,Build Settings中,搜索,prefix header ,搜到后添加 把创建的pch文件拖入其中;只保留工程名+pch文件名; 不然文件换了位置会无法使用

    9,快捷键 : com+ctrl+上下 .h和.m文件相互跳转

    10,创建单例的时候 请求一遍网络数据;但是不能在初始化单例的方法里请求; 在init初始化方法里请求; 因为就创建一个单例,所以单例就走一个初始化方法,就只请求一遍网址

    11,懒加载 比如 - (NSMutableArray *)allDataArray { if (!_allDataArray ) { self.allDataArray = [NSMutableArray array]; } return _allDataArray; }

    只有写点语法 才会走getter方法; 创建了数据之后,就可以再使用 _属性名 的格式进行使用;

    12 同步加载中 把请求过程添加到子线程中

    13,

    14, block 起别名 typedef void (^BiMing) (); block声明属性使用copy : 因为block在栈区,我们不能控制, 我们手动可以控制操作的是堆区; block用完之后要销毁,而在栈区不能在用完之后手动销毁, 所以用copy声明属性, copy一份到堆区中,我们就可进行操作了

    block写在数据类的声明里面,

    在.m中的主线程中添加block

    在控制器里调用单例的时候 调用block使用

    14 两个页面之间show 有导航控制器的时候是push,没有的时候默认是模态

    15,快捷键 com+等号,让控件恰好包裹其中的文字内容

    16 播放详情页面,接收前一页传过来的下标,前一页播放的下标是什么,就穿到第二页哪个下标

    17 播放音乐控制器是一个单例控制器 需要一个单例方法

    (instancetype) sharesMusicPlayingVC {

    如果用storyBoard创建的页面, 单例里面进行初始化控制器的时候,不能用alloc init; 要通过标识符来取得storyboard的页面, 又因为单例是一个类方法, 所以不能用简单的self.storyboard这个方法; 用 UIStoryboard storyboardWithName:@“Main” 这样的方式来取得可视化控制器

    18, 控制器生命周期, 创建控制器之后,先走init方法; 在控制器推出之前,不会走任何方法;

    (void) viewWillAppear:(BOOL)animated { 每次视图加载,都会走这个方法; 而在viewDidLoad中,有些方法只会走一次,比如初始化; 而我们有时候会需要每次在视图加载时都需要进行操作变化,就需要把方法写到viewWillAppear中;

    }

    点击正在播放 按钮, 需要保存当前正在播放音乐 的下标,以及保存当前的数据模型 {

    } 在viewWillAppear方法中进行判断下标, 保存下标

    3

    iOS设计规范中要求,当应用退出的时候(包括被终止运行时候),画面中UI元素状态需要保持的,当再次进来的时候看状态与退出是一样的。iOS6之后苹果提供以下API使得UI状态保持和恢复变得很容易了。 在iOS6中我们可以在3地方实现状态保持和恢复: 应用程序委托对象 视图控制器 自定义视图 为了演示这个功能实现,我们把基于故事板的HelloWorld工程改造一下,在画面中添加一个文本框 iOS开发那些事–iOS6 UI状态保持和恢复 用户在文本框中输入一些内容,应用程序退出并且终止后再次进来的时候,文本框中还会保持原来输入的内容。然后在IB的Scene中选中View Controller,打开右边的标识检查器,设置Restoration ID(恢复标识)为viewController。 iOS开发那些事–iOS6 UI状态保持和恢复 恢复标识是iOS6为了实现UI状态保持和恢复添加的设置项目。我们还需要在应用程序委托对象AppDelegate代码部分做一些修改,添加的代码如下: -(BOOL) application:(UIApplication )application shouldSaveApplicationState:(NSCoder )coder { return YES; }

    -(BOOL) application:(UIApplication )application shouldRestoreApplicationState:(NSCoder )coder { return YES; }

    (void)application:(UIApplication )application willEncodeRestorableStateWithCoder:(NSCoder )coder { [coder encodeFloat:2.0 forKey:@”Version”]; }

    (void)application:(UIApplication )application didDecodeRestorableStateWithCoder:(NSCoder )coder { float lastVer = [coder decodeFloatForKey:@”Version”]; NSLog(@”lastVer = %f”,lastVer); } 其中application:shouldSaveApplicationState:在应用退出的时候调用,负责控制是否允许保存状态,返回YES情况是可以保存,NO是不保存。 application:shouldRestoreApplicationState:是应用启动时候调用,负责控制是否恢复上次退出的时候的状态,返回YES情况是可以恢复,NO是不恢复。 application:willEncodeRestorableStateWithCoder:方法是保存时候调用,在这个方法中实现UI状态或数据的保存,其中[coder encodeFloat:2.0 forKey:@”Version”]是保存简单数据。 application:didDecodeRestorableStateWithCoder:方法是恢复时候调用,在这个方法中实现UI状态或数据的恢复,其中[coder decodeFloatForKey:@”Version”]语句是恢复上次保存的数据。 要想实现具体画面中控件的保持和恢复,还需要在它视图控制器中添加一些代码,ViewController.m中添加的代码如下: -(void)encodeRestorableStateWithCoder:(NSCoder *)coder { [super encodeRestorableStateWithCoder:coder]; [coder encodeObject:self.txtField.text forKey:kSaveKey]; }

    -(void)decodeRestorableStateWithCoder:(NSCoder *)coder { [super decodeRestorableStateWithCoder:coder]; self.txtField.text = [coder decodeObjectForKey:kSaveKey]; } 在iOS6之后视图控制器都添加了两个:encodeRestorableStateWithCoder:和 decodeRestorableStateWithCoder:用来实现该控制器中的控件或数据的保存和恢复。其中 encodeRestorableStateWithCoder: 方法是在保存时候调用,[coder encodeObject:self.txtField.text forKey:kSaveKey]语句是按照指定的键保存文本框的内容,decodeRestorableStateWithCoder:方法是在恢复时 候调用,[coder decodeObjectForKey:kSaveKey]是恢复文本框内容时候调用,保存和恢复事实上就是向一个归档文件中编码和解码的过程。

    ( Reactive:响应式编程: web编程中,这种方式编程的软件在网页上,平板上等 都能适应页面正常运行; 在ios中概念是 数据的变化 直接改变视图的展示;

    4 block本质

    1, 普通的局部变量声明后,给block内部使用的话 block内部只会引用它的初始值(block定义的那一刻),block不能跟踪局部变量的改变 block会在定义的那一刻,就直接获得外部局部变量的值,以后都不会变; 即 block括号内获得的输出值只会永远是从上面获得的int age = 10; 下面再对age如何赋值毫无影响

    2 加上 下划线 __block修饰的block就不一样了,block方法内部会一直引用被__block修饰的变量; 这是让block获取到变量的方法 3 用static修饰的变量 block也能一直访问该age变量, 因为用static修饰了,这个局部变量就会变成了静态变量,会一直存在内存中,所以block能一直访问到这个变量,跟踪它的变化; 而不加修饰声明的普通局部变量,声明之后就会死掉., 如果在外边在调用block,就会访问不到这个变量, 所以为了防止这种情况出错,block在用普通的局部变量的时候就会直接把值定死,不会再变化;

    4

    block引用 全局变量,

    num声明在block方法外部,是一个全局变量, 会一直存在于内存中, block就也能一直访问到它的变化

    5 cell自适应高度

    计算一段文本在限定宽高内所占矩形的大小

    - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context;

    使用时的注意事项: 1: NSAttributedString 的每个部分都要至少设置两个属性: NSFontAttributeName NSForegroundColorAttributeName 2: NSStringDrawingOptions 的值, 在多行的情况下, 至少要有 NSStringDrawingUsesLineFragmentOrigin NSStringDrawingUsesFontLeading

    转载请注明原文地址: https://ju.6miu.com/read-1126198.html

    最新回复(0)