iOS尺寸单位pt、ppi与px之间换算关系
iOS中的UI单位:
px:像素,构成影像的最小单位
ppi:Pixels Per Inch,即每英寸所拥有的像素数目,屏幕像素密度
pt:iOS开发单位,即point,绝对长度,约等于0.16毫米
注意: pt是绝对长度,不随屏幕像素密度变化而变化(和我们日常用到的毫米、厘米是一个意思,只是它要小得多),在非视网膜的 iPhone 上(iPhone 3G),苹果规定 1px=1pt,也就是说 pt 和像素点是一一对应的。但随着 iPhone 4 的到来,高分屏出现了(视网膜屏),这个时候 1pt 对应 2px。
ps:iOS 中的 pt 和安卓开发中的单位 dp 本质上是一个概念,都是独立像素的意思,只是叫法不一样而已.
iPhone 屏幕数据:px与pt转换比
型号
屏幕尺寸
分辨率(pt)
Reader
Reader分辨率(px)
渲染后(px)
PPI
iPhone 3GS
3.5英寸
320 x 480
@1x
320 x 480
-
163
iPhone 4/4S
3.5英寸
320 x 480
@2x
640 x 960
-
326
iPhone 5 ...
MacOSX 上集成 Apache+SVN
SVN搭建既然要配置 http 方式访问 svn,那我就默认大家已经配置了 svn 本地仓库。如果没有配置可参考:Mac本地SVN搭建具体流程详见:iOS版本管理之SVN—服务器端配置:Mac版
Apache配置Mac电脑自带Apache,在命令行执行:sudo apachectl restart,即可重启Apache。在浏览器输入http://localhost/ 出现It works!代表Apache服务启动成功。
Apache虽然启动成功,且可以在浏览器通过http://localhost/ 访问本地,但是想要访问SVN还不可行,因为缺少相关配置,会报404错误。
Apache配置的大致流程:
手工编译 svn,获取依赖包 mod_authz_svn.so、mod_dav_svn.so,Apache server 需要的,但是mac 上通过 homebrew 安装的 svn 是没有这些包得,原生的 Apache server 也没有
修改 Apache server 配置文件/etc/apache2/httpd.conf,加载对应的 module
建立 svn.con ...
iOS版本管理之SVN
一、基本使用1. 常用基础命令
svn checkout : 将服务器代码完整的下载到本地
svn commit : 将本地修改的内容(可运行版本),提交到服务器
svn update : 将服务器最新的代码下载带本地
2. SVN使用环境
要想利用SVN管理源代码,必须得有2套环境:
服务器:
用于存储客户端上传的源代码
可以在Windows上安装Visual SVN Server
大部分情况下,公司的开发人员不必亲自搭建SVN服务器
客户端
上传本地的源代码到服务器,或者更新服务器的代码到本地,保持同步
可以在Mac上使用命令行、Cornerstone、Xcode、Versions
开发人员就属于客户端这个角色
二、服务器端配置:Mac版
svn –version 查看本地SVN版本,没有则需要安装
brew install subversion:SVN安装
1. 创建代码仓库:用来存储客户端所上传的代码
创建svn目录:
使用终端或者直接在Finder中创建想要存放svn的路径,比如在当前用户目录下新建,以后可以在svn目录下创建多个仓 ...
iOSUITabBarContrller详解与使用
一、UITabBarController简介
UITabBarController - 选项卡控制器,与导航控制器一样,也被广泛用于各种ios应用程序。顾名思义,选项卡控制器在屏幕底部显示一系列“选显卡”,这些选项卡表示为图标和文本,用户触摸它们将在不同的场景间切换。和UINavigationController类似,UITabBarController也可以用来控制多个页面导航,用户可以在多个视图控制器之间移动,并可以定制屏幕底部的选项卡栏。 借助屏幕底部的选项卡栏,UITabBarController不必像UINavigationController那样以栈的方式推入和推出视图,而是建立一系列的控制器(这些控制器可以是UIViewController、UINavigationController、UITableViewController等)并将它们添加到选项卡栏,使每个选项卡对应一个控制器。每个场景都呈现了应用程序的一项功能,或是提供了一种查看应用程序的独特方式。
二、UITabBarController的原理
当UITabBarController做为Window的根 ...
iOS音视频开发(四)重识音频
我们平时在互联网上听到的声音,都是先经过录制后,再传输到互联网上的。比如歌曲、电影、主播等的声音。
PCM录音的原理可以简单理解为:把声源的振动记录下来,需要时再让某个物体按照记录下来的振动规律去振动,就会产生与原来一样的声音。
如何把声音(声源的振动)记录下来呢?声音属于模拟信号,但更便于计算机处理和存储的是数字信号(二进制编码),所以需要将模拟信号(Analog Signal)转成数字信号(Digital Signal)后进行存储。这一过程,我们可以称之为:音频数字化。
将音频数字化的常见技术方案是脉冲编码调制(PCM,Pulse Code Modulation),主要过程是:采样 → 量化 → 编码。
采样模拟信号的波形是无限光滑的,可以看成由无数个点组成,由于存储空间是相对有限的,数字编码过程中,必须要对波形的点进行采样。采样(Sampling):每隔一段时间采集一次模拟信号的样本,是一个在时间上将模拟信号离散化(把连续信号转换成离散信号)的过程。
采样率每秒采集的样本数量,称为采样率(采样频率,采样速率,Sampling Rate)。比如,采样率44. ...
iOS音视频开发(三)Qt基础
.pro文件的配置跨平台配置之前我们分别在Windows、Mac环境的Qt项目中集成了FFmpeg。
可以发现在**.pro文件的配置中,FFmpeg库在Mac、Windows上的位置是有所差异的。这样就会导致.pro**文件无法跨平台使用。
12345# windowsINCLUDEPATH += F:/Dev/ffmpeg-4.3.2/include# macINCLUDEPATH += /usr/local/Cellar/ffmpeg/4.3.2/include
为了实现跨平台配置,可以在配置前面加上平台标识的前缀,表示这个配置只会在对应的平台生效。
12345678910111213141516171819202122232425262728# windowswin32:INCLUDEPATH += F:/Dev/ffmpeg-4.3.2/includewin32:LIBS += -LF:/Dev/ffmpeg-4.3.2/lib \ -lavcodec \ -lavdevice \ -lavf ...
ios Objective-c的多态理解
多态基本概念
多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。
在使用多态时,会进行动态检测,以调用真实的对象方法。
多态在代码中的体现即父类指针指向子类对象
经典实例讲解1 、Animal父类 Animal.h
12345#import <Foundation/Foundation.h>@interface Animal : NSObject - (void) eat; @end
Animal.m
123456#import "Animal.h"@implementation Animal - (void)eat{ NSLog(@"all animals need to eat food"); } @end
2 、cat子类123456#import <Foundation/Foundation.h>#import "Animal.h"@interface Cat : Animal - (void) eat; @en ...
swift类与结构体
类和结构体
结构体和类作为一种通用而又灵活的结构,是构建代码的基础;
可以使用定义常量、变量和函数的语法,为你的结构体和类定义属性、添加方法
Swift 只需在单一的文件中定义一个结构体或者类,系统将会自动生成面向其它代码的外部接口
注:通常一个类的实例被称为对象。然而相比其他语言,Swift 中结构体和类的功能更加相近,本文中所讨论的大部分功能都可以用在结构体或者类上。因此,这里会使用实例这个更通用的术语。
结构体和类对比
功能
类
结构体
定义属性用于存储值
支持
支持
定义方法用于提供功能
支持
支持
定义构造器用于设置初始值
支持
支持
通过扩展以增加默认实现之外的功能
支持
支持
遵循协议以提供某种标准功能
支持
支持
定义下标操作用于通过下标语法访问它们的值
支持
支持
继承允许一个类继承另一个类的特征(继承)
支持
不支持
类型转换允许在运行时检查和解释一个类实例的类型
支持
不支持
析构器允许一个类实例释放任何其所被分配的资源(资源释放)
支持
不支持
引用计数允许对一个类的多次引用(计数引用 ...
iOS CoreAnimation(核心动画三)图形几何学
布局
UIView有三个比较重要的布局属性:frame,bounds和center
CALayer对应地叫做frame,bounds和position
frame代表了图层的外部坐标(也就是在父图层上占据的空间)
bounds是内部坐标({0, 0}通常是图层的左上角)
center和position都代表了相对于父图层anchorPoint所在的位置
视图的frame,bounds和center属性仅仅是存取方法,当操纵视图的frame,实际上是在改变位于视图下方CALayer的frame,不能够独立于图层之外改变视图的frame
对于视图或者图层来说,frame并不是一个非常清晰的属性,它其实是一个虚拟属性,是根据bounds,position和transform计算而来,所以当其中任何一个值发生改变,frame都会变化。相反,改变frame的值同样会影响到他们当中的值
当对图层做变换的时候,比如旋转或者缩放,frame实际上代表了覆盖在图层旋转之后的整个轴对齐的矩形区域,也就是说frame的宽高可能和bounds的宽高不再一致了:
锚点: anchorPoin ...
iOS CoreAnimation(核心动画二)寄宿图:layer图层中包含的图
contents属性
CALayer 有一个属性叫做contents,这个属性的类型被定义为id,意味着它可以是任何类型的对象。可以给contents属性赋任何值,你的app仍然能够编译通过;
但是,在实践中,如果你给contents赋的不是CGImage,那么你得到的图层将是空白的
思考:为什么contents 属性的类型被定义为id?
由Mac OS的历史原因造成的。它之所以被定义为id类型,是因为在Mac OS系统上,这个属性对CGImage和NSImage类型的值都起作用。如果你试图在iOS平台上将UIImage的值赋给它,只能得到一个空白的图层。
contents属性的实际赋值
事实上,你真正要赋值的类型应该是CGImageRef,它是一个指向CGImage结构的指针
UIImage有一个CGImage属性,它返回一个”CGImageRef”,如果你想把这个值直接赋值给CALayer的contents,那你将会得到一个编译错误。因为CGImageRef并不是一个真正的Cocoa对象,而是一个Core Foundation类型
尽管Core Foun ...