1.监测网络状态:

  1. - (void)checkNetwork {
  2. __block NSString *tips;
  3. _reachiabilityManager = [AFNetworkReachabilityManager manager];
  4. [_reachiabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
  5. switch (status) {
  6. case -:{
  7. tips = @"未知网络错误";
  8. break;
  9. }
  10. case :{
  11. tips = @"暂无网络,请检查网络";
  12. break;
  13. }
  14. case :{
  15. tips = @"当前连接的数据流量";
  16. break;
  17. }
  18. case :{
  19. tips = @"当前连接的是wifi";
  20. break;
  21. }
  22. default:
  23. break;
  24. }
  25. if (tips.length) {
  26. // 提示
  27. }
  28. }];
  29. [_reachiabilityManager startMonitoring];
  30. }

2.进入直播页面判断权限:

  1. // 判断是否是模拟器
  2. if ([[UIDevice currentDevice] isSimulator]) {
  3. [self showNoticeMessage:@"请使用真机运行"];
  4. return NO;
  5. }
  6.  
  7. // 判断是否有摄像头
  8. if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
  9. [self showNoticeMessage:@"您的设备没有摄像头或者相关的驱动, 不能进行直播"];
  10. return NO;
  11. }
  12.  
  13. // 判断是否有摄像头权限
  14. AVAuthorizationStatus authorizationStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
  15. if (authorizationStatus == AVAuthorizationStatusRestricted|| authorizationStatus == AVAuthorizationStatusDenied) {
  16. [self showNoticeMessage:@"app需要访问您的摄像头。\n请启用摄像头-设置/隐私/摄像头"];
  17. return NO;
  18. }
  19.  
  20. // 开启麦克风权限
  21. AVAudioSession *audioSession = [AVAudioSession sharedInstance];
  22. if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
  23. [audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
  24. if (granted) {
  25. return YES;
  26. } else {
  27. [self showNoticeMessage:@"app需要访问您的麦克风。\n请启用麦克风-设置/隐私/麦克风"];
  28. return NO;
  29. }
  30. }];
  31. }

3.直播使用的第三方:

视频播放:IJKMediaFramework

弹幕:BarrageRenderer

推流:LFLiveKit

源码学习: https://github.com/SunLiner/MiaowShow

4.Cell中的倒计时:

  1. /// 每秒执行一次
  2. - (void)countDownWithPER_SECBlock:(void (^)())PER_SECBlock {
  3.  
  4. if (_timer==nil) {
  5. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, );
  6. _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, , ,queue);
  7. dispatch_source_set_timer(_timer,dispatch_walltime(NULL, ),1.0*NSEC_PER_SEC, ); //每秒执行
  8. dispatch_source_set_event_handler(_timer, ^{
  9. dispatch_async(dispatch_get_main_queue(), ^{
  10. PER_SECBlock();
  11. });
  12. });
  13. dispatch_resume(_timer);
  14. }
  15. }

5.搜索时设置“搜索高亮”:

  1. // 设置搜索高亮
  2. if (model.searchKeyWord.length > ) {
  3. // 从全部文字中找到特殊的文字
  4. NSRange range = [model.titleStr rangeOfString:model.searchKeyWord];
  5. if (range.location != NSNotFound && range.length > ) {
  6. NSMutableAttributedString *muAttStr = [[NSMutableAttributedString alloc] initWithString:model.titleStr];
  7. [muAttStr addAttribute:NSForegroundColorAttributeName value:BLUE_COLOR range:range];
  8. self.titleLabel.attributedText = muAttStr;
  9. }
  10.  
  11. }

iOS知识点总结的更多相关文章

  1. IOS学习笔记48--一些常见的IOS知识点+面试题

      IOS学习笔记48--一些常见的IOS知识点+面试题   1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...

  2. iOS 知识点梳理

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错 ...

  3. ios知识点

    在controller中加载plist数据 1,设置属性NSArray 或可变数组NSMutableArray @property(nonatomic,strong)NSArray *message; ...

  4. iOS知识点全梳理-备用

    感谢大神分享 文/Jack_lin(简书作者)原文链接:http://www.jianshu.com/p/5d2163640e26著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序言 ...

  5. iOS 知识点

    1. @dynamic.@synthesize 2. iOS NSTimer 3. iOS 之 Aggregate Target 4. iOS 属性之assign.copy.retain 5. iOS ...

  6. iOS知识点集合--更改(2)

    3.nsmutablearray *a 如果直接赋值 a = @[@"d",@""]; 这个时候a 是不可变的 字典也是如此 2.如果接口调用错误的话 打印re ...

  7. iOS知识点、面试题 之三

    最近面试,发现这些题 还不错,与大家分享一下,分三文给大家: 当然Xcode新版本区别,以及iOS新特性 Xcode8 和iOS 10 在之前文章有发过,感兴趣的可以查阅: http://www.cn ...

  8. iOS知识点、面试题 之二

    最近面试,与大家分享一下,分三文给大家: 当然Xcode新版本区别,以及iOS新特性 Xcode8 和iOS 10 在之前文章有发过,感兴趣的可以查阅: http://www.cnblogs.com/ ...

  9. ios知识点总结——UITableView的展开与收缩及横向Table

    UITableVIew是iOS开发中使用最为广泛的一种控件,对于UITableView的基本用法本文不做探讨,本文主要是针对UITableView的展开与收缩进行阐述,在文章的后面也会探讨一下横向ta ...

  10. IOS知识点收集

    17  duplicate symbols for architecture armv7s 用cocoapods 的时候出现,这种错误一般是由重复引用库文件引起. 原因:自己尝试添加Reachabil ...

随机推荐

  1. PAT Basic 1074 宇宙无敌加法器 (20 分)

    地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”.每个 PAT 星人都必须熟记各位数字的进制 ...

  2. jade-包含

    模板继承是子文件,父文件继承和代码复用的问题,那模版包含是文件与文件之间,文件与区块之间,这种区块内嵌的东西 继承的关键字是extends, 那模板包含使用的是include这个关键字 head.ja ...

  3. nomn文件分析

    #encoding=gbk import os import re import math from os import path ''' 手动输入文件nmon文件路径,要截取的开始时间,结束时间 ' ...

  4. 通过.frm表结构和.ibd文件恢复数据

    整个恢复过程其实可以总结为下面几步: (1):恢复表结构 (2):复制出来创建表的sql语句 (3):恢复表数据(在恢复表数据的时候,首先需要解除当前创建的表与默认生成的.ibd文件间的关系,接着将要 ...

  5. easyUI-filebox图片上传和预览

    转载自:https://blog.csdn.net/nvxiaq/article/details/77740516 备注: 1.如需上传多个图片可定义多个change_photo函数 在onChang ...

  6. ajax向后台传递数组参数并将后台响应的数据赋值给一个变量供其它插件使用

    1.在js中封装ajax向后台传递数组参数函数 //combogrid * * @Description 封装ajax向后台传递数组参数并将后台响应的数据赋值给一个变量方便其他插件使用该数据函数 * ...

  7. C语言定义数组时使用枚举作为数组的下标 ——c99功能

    部分参考了https://blog.csdn.net/wq3028/article/details/76204690 同时在电脑上进行验证 //温度,电磁阀传感器序号,方便数组定位 typedef e ...

  8. python执行playbook

    from collections import namedtuple from ansible.parsing.dataloader import DataLoader from ansible.va ...

  9. python原生操作mysql

    import pymysql HOST = '127.0.0.1' PORT = 3306 USER = 'root' PASSWD = ' DB = 'test' CHARSET = 'utf8' ...

  10. Luogu P2151 [SDOI2009]HH去散步 矩乘加速DP

    思路:矩乘优化DP 提交:3次(用了一个奇怪的东西导致常数过大) 题解: 如果可以走完正向边后又走反向边那就显然了,但是不能走,所以我们要将正反向边分别编号,区分正反向边. 所以这道题的矩阵是以边的编 ...