扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
我们通常所说的iPhone5屏幕尺寸为4英寸、iPhone6屏幕尺寸为4.7英寸,指的是显示屏对角线的长度(diagonal)
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、做网站、成都外贸网站建设公司、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的九江网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
PPI(Pixel Per Inch by diagonal):表示沿着对角线,每英寸所拥有的像素(Pixel)数目。
PPI数值越高,代表显示屏能够以越高的密度显示图像,即通常所说的分辨率越高、颗粒感越弱。
根据勾股定理
计算结果稍有出入,这是因为像素的离散采样有锯齿效应。
早期的iPhone3GS的屏幕分辨率是320*480(PPI=163),iOS绘制图形(CGPoint/CGSize/CGRect)均以point为单位(measured in points):
后来在iPhone4中,同样大小(3.5 inch)的屏幕采用了Retina显示技术,横、纵向方向像素密度都被放大到2倍,像素分辨率提高到(320x2)x(480x2)= 960x640(PPI=326), 显像分辨率提升至iPhone3GS的4倍(1个Point被渲染成1个2x2的像素矩阵)。
在同样的逻辑坐标系下(320x480):
为了自动适应分辨率,系统会根据设备实际分辨率,自动给UIScreen.scale赋值,该属性对开发者只读。
在同样的逻辑分辨率下,可以通过scale参数识别是iPhone3GS还是iPhone4(s)。以下基于nativeScale参数,定义了探测机型是否为iPhone6+的宏
--------------------------------------------------------------------------------那么,同样的分辨率和scale,如何区分机型iPhone4与4s、iPhone5与5s呢?通过[[UIDevice currentDevice] model]只能判别iPhone、iPad、iPod大类,要判断iPhone具体机型型号,则需要通过sysctlbyname("hw.machine")获取详细的设备参数信息予以甄别。
iPhone3GS时代,我们为一个应用提供图标(或按钮提供贴图),只需要icon.png。针对现在的iPhone4~6 Retina显示屏,需要制作额外的@2x高分辨率版本。
Phone6+在实际渲染时,downsampling/1.15(1242x2208-1080x1920),准确的讲,应该是@2.46x。苹果为方便开发者用的是@3x的素材,然后再缩放到@2.46x上。
参考: 一张图帮你看懂 iPhone 6 Plus 屏幕分辨率
1
该方法使用系统缓存,适合表视图重复加载图像的情形。同时该API根据UIScreen的scale,自动查找包含对应高倍图后缀名(@2x)的文件,如果找到二倍图,则image.scale=2.0,对应逻辑size大小以point度量(pixel度量的一半);如果没找到设置默认image.scale=1.0,对应逻辑size大小同像素尺寸。因此,
2
这组方法创建的UIImage对象 没有使用系统缓存 ,并且指定文件名必须包含明确的高倍图后缀。
3
//考虑 转屏 的影响,按照实际屏幕方向(UIDevice Orientation)的宽高
//不考虑转屏的影响,只取竖屏(UIDevice OrientationPortrait)的宽高
待续
将开发环境升级到Xcode 10, Swift 4.2及iOS 12后,工程里会出现许多错误。其中的很多错误,只需要点击它的小圆点,Xcode会自动帮我们修复,这些略去不谈。本文主要讲一下不能自动修复的错误。
最后,将目录b中的GRDB.framework/Modules/GRDB.swiftmodule中的所有内容复制到目录c中的对应位置。当前目录c中的GRDB.framework就是我们所需要的。
4)打包时不支持包含i386或者x86_64架构的包内容,所以还需要将它们去掉。这里使用的是如下脚本,是根据云信的脚本修改的(它的脚本在Xcode 10下不能正确工作)。
这样就完成了,最后提供一下参考的云信的脚本:
修改为:
参考:
这是因为它们在Swift 4.2中被改成变量了,改成下面这样:
以前工程里是这样写的,但现在不行了,必须写成
改成
参考:
那么解决方案有两个:
a. 使用Xcode 9.4.1打包提交App
b. 将可支持的最低iOS版本提到iOS 9.3
参考:
Swift版导航栏适配参考
在iOS 13中给导航的 UINavigationBar 增加了 scrollEdgeAppearance 属性应用在iOS 14及更早版本的大标题导航栏上,在iOS 15中 scrollEdgeAppearance 属性适用于所有的导航栏
官方解释:描述当关联的UIScrollView到达与导航条相邻的边缘(导航条的上边缘)时要使用的导航条的外观属性。如果没有设置,将使用修改后的standardAppearance
scrollEdgeAppearance 与 standardAppearance 一样同属于 UINavigationBarAppearance 类型 父类是 UIBarAppearance
其中影响导航栏颜色、阴影涉及到以下属性
因为 scrollEdgeAppearance = nil ,当前控制器如果使用有 ScrollView 类的控件,当 ScrollView 向上滚动时 scrollEdgeAppearance 会默认使用 standardAppearance 的属性效果。所以 backgroundEffect 和 shadowColor 属性需要显式设置为nil,以防止 backgroundEffect、shadowColor 有颜色值影响导航栏透明效果。
下一篇:Swift版导航栏适配
PERFECT!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流