1.监测网络状态:

- (void)checkNetwork {
__block NSString *tips;
_reachiabilityManager = [AFNetworkReachabilityManager manager];
[_reachiabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case -:{
tips = @"未知网络错误";
break;
}
case :{
tips = @"暂无网络,请检查网络";
break;
}
case :{
tips = @"当前连接的数据流量";
break;
}
case :{
tips = @"当前连接的是wifi";
break;
}
default:
break;
}
if (tips.length) {
// 提示
}
}];
[_reachiabilityManager startMonitoring];
}

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

// 判断是否是模拟器
if ([[UIDevice currentDevice] isSimulator]) {
[self showNoticeMessage:@"请使用真机运行"];
return NO;
} // 判断是否有摄像头
if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
[self showNoticeMessage:@"您的设备没有摄像头或者相关的驱动, 不能进行直播"];
return NO;
} // 判断是否有摄像头权限
AVAuthorizationStatus authorizationStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if (authorizationStatus == AVAuthorizationStatusRestricted|| authorizationStatus == AVAuthorizationStatusDenied) {
[self showNoticeMessage:@"app需要访问您的摄像头。\n请启用摄像头-设置/隐私/摄像头"];
return NO;
} // 开启麦克风权限
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
[audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
if (granted) {
return YES;
} else {
[self showNoticeMessage:@"app需要访问您的麦克风。\n请启用麦克风-设置/隐私/麦克风"];
return NO;
}
}];
}

3.直播使用的第三方:

视频播放:IJKMediaFramework

弹幕:BarrageRenderer

推流:LFLiveKit

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

4.Cell中的倒计时:

/// 每秒执行一次
- (void)countDownWithPER_SECBlock:(void (^)())PER_SECBlock { if (_timer==nil) {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, );
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, , ,queue);
dispatch_source_set_timer(_timer,dispatch_walltime(NULL, ),1.0*NSEC_PER_SEC, ); //每秒执行
dispatch_source_set_event_handler(_timer, ^{
dispatch_async(dispatch_get_main_queue(), ^{
PER_SECBlock();
});
});
dispatch_resume(_timer);
}
}

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

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

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. Http协议与TCP协议

    背景 在日常工作中,经常会遇到某某框架是基于Http协议或者TCP协议,今天,就针对于该协议,整理下 从本质上来说,Http协议与TCP协议是应用在不同网络层,Http协议处于应用层,TCP处于传输层 ...

  2. JS基本数据类型和引用数据类型区别

    1.栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放:而heap则是动态分配的内存,大小也不一定会自动释放 2.数据类型 JS分两种数据类型: 基本数据类型:Numb ...

  3. linux实操_shell自定义函数

    基本语法: #定义函数 function 函数名(){ 函数体 } #调用函数 函数名 参数1 参数2... 实例:计算两个数的和. 运行后

  4. 一个ball例程带你进入 Halcon 世界

    * 此例程来自halcon自带例程,请打开 halcon->ctrl+E 打开例程->搜索框中输入ball added by xiejl* ball.hdev: Inspection of ...

  5. J-Link OB F103 固件提取及维修

    焊接心得挺不错的,可以学习到了 事情起因 某日在调试stm32的时候,错将5v接入3.3v电源输入,开发板烧掉.而且因为jlink没拔掉,也一同阵亡了.光烧了个芯片把整个板换掉太亏,遂打算动手修复. ...

  6. UPS电源运用在数据中心,有什么优势?

    UPS电源是每个数据中心为了保证服务器与计算设备不被电力线干扰与电能质量问题所影响的设备. 1.电源选择 运用在线式或是后备式UPS电源,均需依照微机设备的需求与经济条件所决定.若是经济条件相对较好, ...

  7. django-rest-framework --- 基础简介

    目录 drf知识点 --- 后台 django restframework介绍 drf框架安装 接口 接口组成 如何写接口 接口组成的两大部分 接口文档 Postman接口工具使用 基于resrful ...

  8. ValueError: Expecting property name: line 1 column 2 (char 1)

    代码: import json str2 = '{"domain":"456"}' str1 = "{'domain':'123'}" pr ...

  9. Vue之合理划分容器组件与展示组件

    Vue之合理划分容器组件与展示组件 时间 2019-06-02 00:30:32  Poetry's Blog 原文  http://blog.poetries.top/2019/06/01/vue- ...

  10. sequence_loss的解释

    在做seq2seq的时候,经常需要使用sequence_loss这是损失函数. 现在分析一下sequence_loss这个函数到底在做什么 # coding: utf-8 import numpy a ...