iOS动画框架简述
ios动画与绘图框架
UIKit:(UIView动画)最常用的视图框架,封装度最高,都是OC对象。
CoreAnimation:核心动画,提供强大的2D和3D动画效果。
CoreGraphics:绘图,纯C的API,使用Quartz2D做引擎。
CoreText:一种能够对文本格式和文本布局进行精细控制的文本引擎.
CoreImage:给图片提供各种滤镜处理,比如高斯模糊、锐化等
OpenGL-ES:主要用于游戏绘制,但它是一套编程规范,具体由设备制造商实现。(OpenCV)
总结:
核心动画和UIView区别:核心动画作用在CALayer(Core animation layer)上,CALayer从概念上类似UIView,我们可以将UIView看成是一种特殊的CALayer(可以响应事件)。实际上,每一个view都有其对应的layer,这个layer是root layer。
iOS CoreAnimation(核心动画一)图层树Layer
一、 图层与视图
iOS视图的定义:
一个视图就是在屏幕上显示的一个矩形块(比如图片,文字或者视频),它能够拦截类似于鼠标点击或者触摸手势等用户输入(屏幕可见)
视图在层级关系中可以互相嵌套,一个视图可以管理它的所有子视图的位置(嵌套关系)
在iOS当中,所有的视图都从一个叫做UIVIew的基类派生而来:
1.1. UIView可以处理触摸事件
1.2. 可以支持基于Core Graphics绘图
1.3. 可以做仿射变换(例如旋转或者缩放)
1.4. 或者简单的类似于滑动或者渐变的动画
iOS中的图层:
CALayer类在概念上和UIView类似,同样也是一些被层级关系树管理的矩形块
也可以包含一些内容(像图片,文本或者背景色),管理子图层的位置
有一些方法和属性用来做动画和变换
和UIView最大的不同是CALayer不处理用户的交互!!!
平行的层级关系
每一个UIview都有一个CALayer实例的图层属性
视图的职责就是创建并管理这个图层:以确保当子视图在层级关系中添加或者被移除的时候,他们关联的图层也同样对应在层级关系树当中有相同的操作!
实 ...
大端模式与小端模式
术语:字节顺序
大端模式:数据位高的存放于低地址,数据位低的存放于高地址
十六进制:0x12345678 ——-> 十进制305419896
数据位从左到右是从高到低(万千百十个…..
数据位
内存地址
0x12
0x4000
0x34
0x4001
0x56
0x4002
0x78
0x4003
小段模式:数据位高的存放于高地址,数据位低的存放于低地址
数据位
内存地址
0x78
0x4000
0x56
0x4001
0x34
0x4002
0x12
0x4003
注:iOS中:ARM芯片(iPhone)默认采用小端
Undefined_symbol:_OBJC_CLASS_xxx解决方法
错误提示:
编译时候发现错误 Undefined symbol: OBJC_CLASS$_xxxxxx
错误原因:
xcode的tagerts中的编译文件没有加入.m或者.swift 类文件
解决方法:
点击Targets -> Build Phases -> Compile Sources 下面的 + 加号,然后选择.m 或者 .swift 文件点击add,为了快速找到文件,可以在上面搜索框输入文件名
iOS音视频开发(二)开发库的选择及Mac/Windows环境搭建
一、各平台特有音视频开发库
iOS:AVFoundation,AudioUnit等
Android:MediaPlayer、MediaCodec等
Windows:Directshow等
二、跨平台开发库:FFmpeg
音视频开发选择基于C语言的FFmpeg
GUI图形界面的开发选择基于C++的Qt(QtCreator)
三、Mac环境配置1. FFmpeg安装
在Mac环境中,直接使用Homebrew安装FFmpeg即可: brew install ffmpeg
FFmpeg版本查看: ffmpeg -version
目录结构:
通过brew install安装的软件会存放到 /usr/local/Cellar 目录中,通过以下命令可以打开FFmpeg的安装目录:
cd /usr/local/Cellar/ffmpeg
bin:有编译好的可执行程序:ffmpeg、ffplay等,可以直接在命令行上使用,比如:
ffplay xx.mp4:可以直接播放某个视频
ffmpeg -version:可以查看FFmpeg的版本号
include:开发 ...
swift常用三方库
网络: Moya (基于Alamofire的网络框架):https://github.com/Moya/Moya
网络状态检测:Reachability.swift
数据解析与模型转换:
SwiftyJSON https://github.com/SwiftyJSON/SwiftyJSON
HandyJSON
加载图:NVActivityIndicatorView https://github.com/ninjaprox/NVActivityIndicatorView
布局:SnapKit https://github.com/SnapKit/SnapKit
图片处理:Kingfisher https://github.com/onevcat/Kingfisher
钥匙串:KeychainAccess https://github.com/kishikawakatsumi/KeychainAccess
下拉刷新:DGElasticPullToRefresh:有弹性效果的下拉刷新控件
图标、绘画
Charts:非常好的图表框架,类似于MPAndroidChart ...
iOS多次移除Observer或者移除不存在的Observer导致崩溃的3中解决方案
问题引述:使用Observer时遇到Cannot remove an observer XXXXXXXX for the key path “aObserverName” from XXXXXXXX because it is not registered as an observer方案一::利用 @try @catch(只能针对删除多次KVO的情况下)
利用 @try @catc:这种方法真是很Low,人就会有问题,不过很简单就可以实现。(对于初学者来说,如果不怕麻烦,确实可以使用这种方法)。这种方法只能针对多次删除KVO的处理,原理就是try catch可以捕获异常,不让程序catch。这样就实现了防止多次删除KVO。
123456@try { [appDelegate removeObserver:self forKeyPath:@"kvoState"];}@catch (NSException *exception) { NSLog(@"多次删除kvo 报错了");}
方法功能拓展:
...
iOS音视频开发(一)重识图片
一. 图片
每张图片都有N个像素组成(N>=1)
如果一张图片的分辨率是W x H, 那么:
每一行都有W个像素,共有H行,总计W*H个像素
宽度是W像素,高度是H像素
每一个像素都有其独立的颜色!!!
二、RGB颜色模型
RGB Color Model: RGB颜色模型(三原色 光模式)
R+G=Y
R+B=Magenta洋红色
G+B=Cyan青色[saɪæn]
R+G+B=W
思考:每一个像素的颜色信息是符合存储的?
位深度Bit Depth == 色彩深度(色深)Color Depth
如果一张图片的位深度位n,那么它的每一个像素都会使用n个二进制位来存储颜色信息!!
常见位深度是:24 ,表示每一个像素都会使用24个二进制位来存储颜色信息;
因为每一个像素的颜色都是用R、G、B这3个颜色通道合成的;
每个颜色通道都用8bit(位)表示其“含量”值(范围0000 0000 — 1111 1111,即0-255或00-FF):
颜色
rgb表示
十六进制表示
红色
rgb(255,0,0)
#ff0000
绿色 ...
Hexo搭建教程
一、环境准备
注册一个gitHub账号
安装homebrew:使用它可以安装Mac没有预装但你会需要的东西
安装 node.js:安装的node.js中已经包含了npm
检验node和npm是否安装成功:进入到终端输入指令:node -v npm -v
二、Hexo安装
安装
使用npm安装:npm install -g hexo-cli
版本检查: hexo -v
在本地建站
在终端切换(cd)一个你想指定的目录下,执行下面这个命令: hexo init blog
在新建好的blog文件夹下安装 hexo配置:npm install
开启服务器:hexo server
本地访问检查:http://localhost:4000/
可能出现的问题:服务器启动失败:可能是node版本过低,可尝试更新!
三、Github库关联与代码托管
在GitHub新建远程仓库
hexo本地关联配置
打开刚刚新建的blog文件夹,进入到_config.yml文件夹下,可以用sublime打开或者其他工具更改添加以下内容(注意此处要在冒号的后面加上空格)
...