ios开发缩放,苹果app缩放
iOS开发之像素与点
相信iOSer们都被iOS开发中像素和点这两个概念困扰过,经过一段时间的学习和总结,再次为大家讲讲我的个人理解,希望对和我有同样困惑的同学一些帮助...
成都创新互联公司成立于2013年,我们提供高端成都网站建设、成都网站制作、成都网站设计、网站定制、营销型网站、小程序开发、微信公众号开发、网站推广服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为建筑动画企业提供源源不断的流量和订单咨询。
首先,点(point)是Apple制定的一个独立于物理设备的逻辑坐标单位。像素(pixel)是组成图象的最基本单元。这两个概念是不完全等同的。在iphone4之前的设备中,一个点等同于一个像素的大小。
一个像素有多大呢?主要取决于显示器的分辨率,相同面积不同分辨率的显示屏,其像素点大小就不相同。
OK,这又引入了一个叫做“分辨率”的名词。
拿iPhone 6 Plus为例:
iphone 6 Plus 的分辨率为 1242 x 2208 (实际:1080 × 1920)(pixels),屏幕大小为5.5英寸(5.5英寸为对角线长度,屏幕比例为16 :9)
根据勾股定理就可以算出来屏幕宽和高对应的英寸长度。
点,是一个虚拟的单位,并非实际存在的。
苹果从iphone4开始在在设备上使用宣称的“Retina”屏幕,Retina在英文中,是视网膜的意思。
在Retina屏幕中,一个点(point)占据2个像素的宽度。
而在之后的 iphone 6 Plus 和 iphone 7 Plus 中更推出超高像素密度的“Retina”屏幕,像素密度(PPI)达到 401。
所以在超高像素密度的 iphone 6 Plus 和 iphone 7 Plus 上,一个点(point)占据3个像素的宽度(注意:此处仅仅代表单方向的宽度)。
介绍完点和像素的区别,下面就分别讲一下在开发中的用法:
我们亲爱的的美工妹子,在为iOS设备设计时都是用像素(pixels)衡量的。
从@2x 到 @3x,素材的分辨率提高了1.5倍,例如:@2x的素材为44 x 44 (pixels),那么相应的@3x素材大小为66 x 66 (pixels)。
初代iPhone屏幕尺寸为3.5英寸,PPI为163。
从Retina屏幕开始,PPI提升到326。
直至Plus系列的PPI为 401。
先再计算一下iPhone 6 Plus 的像素和点:
屏幕点坐标系设计的宽度为 414 x 736 (points),理论对应像素应该是:1242 x 2208(pixels)。
但是,iPhone 6 Plus 的物理像素为:1080 x 1920(pixels),对应5.5英寸的屏幕,所以像素密度就计算出来就是401。
在iPhone 4 -- iPhone 7产品中,除了iphone 6 Plus 和 7 Plus,其他所有iPhone的PPI是一致的,都是326,用@2x的素材。
但是iphone 6 Plus 和 7 Plus的实际DPI是401,理论上苹果应该用401 / 326 * @2x=@2.46x的素材。但是这个奇葩的比例对UI来说很难切图。
所以,苹果为方便开发者,用的是@3x的素材,然后再缩放到@2.46x上,实际上是缩放到2.46/3=82%。
而实际上分辨率为1080 x 1920(pixels),1920/2208≈0.87,1080/1242≈0.87, 所以这样算下来,物理分辨率和虚拟分比率的比例是87%。
这样可以是开发者更方便,比如准备素材时,字号可以直接调成@3x的。
当我们需要使用某张图片时,只需要在xcode的Assets.xcassets中添加上它的@2x 和 @3x的样张,系统会根据当前机型自动选择合适的图片展示。
看完下面这张图,你也许能完全理解上面所说的概念了:
说道这,应该对像素和点有个大概的了解了。在开发中可能还会遇到一些困惑:
假设一个控件在iPhone 6上的宽度为125(points),对比屏幕宽度375(points),125/375 ≈ 33% ,刚好占据屏幕宽度的三分之一。
同一控件展示在6Plus系列上时,125/414 ≈ 30% ,还不到屏幕宽度的三分之一,会显得稍微短一些。
所以,我们在设计控件宽度的时候,尽量少使用类似125(points)这样的死数据。
如果实在有必要使用的话,有一种解决办法就是:
假设:你的基准机型是iphone 6的话,可以自己得出一个比例因子,在通过比例因子去自动适配其他机型。
可以在项目中引入这样一个宏:
最后再多说一句,“文”有AutoLayout,“武”有Masonry,基本上可以满足绝大多数布局要求了吧~
以上就是关于像素和点的一些基本知识了,若有偏否,欢迎指正!
iOS中怎么关闭双击放大缩小网页功能?
直接在“通用”的“缩放”里点击关闭就行了。
这个功能的出发点是 iOS 初期主打的功能就是浏览非 wap 网页,为了快速导航,设计了这个自动识别页面元素的缩放功能。可以试一下,找一个带正文/分栏的网站,双点正文/分栏部分,是不是自动缩放到合适的大小了。
iOS
是由苹果公司开发的移动操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样,属于类Unix的商业操作系统。
原本这个系统名为iPhone OS,因为iPad,iPhone,iPod touch都使用iPhone OS,所以2010年WWDC上宣布改名为iOS(iOS为美国Cisco公司网络设备操作系统注册商标,苹果改名已获得Cisco公司授权)。
iOS 图片的同时旋转缩放
最近项目中的一个小需求,要求图片同时进行旋转和缩放两种操作,做一个简单的总结,先看下效果图:
originalPoint 为旋转缩放的参考点比例,默认是按视图中心旋转,即
self.originalPoint = CGPointMake(0.5, 0.5)
然后就是正常的操作,注意,在缩放的时候,四个角的控制按钮要相反的放缩,保证大小不变,如果有其他元素,同理。
在控制按钮上添加平移手势,记录每一次平移的点 ctrlPoint ,以及上一个平移点,就是 self.lastCtrlPoint
旋转的角度,根据上一个平移点和视图中心点的角度,与当前平移点和视图中心点的角度偏差,进行transform处理。
缩放也是类似,计算上一个平移点与中心点的距离 preDistance ,以及当前平移点和中心点的距离 newDistance ,那么两次平移距离的比例,就是视图缩放的比例。这里做了一个判断,在缩小到一半时停止继续变小。
GitHub:
iOS开发:iPhone尺寸和适配
我们通常所说的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)的宽高
待续
如何让iOS地图开发中也有缩放等级的概念
在开发地图的app的时候,我们发现sdk中没有设置地图缩放等级的概念,
要显示地图就是设置其中心点,然后再用一个span来控制显示的区域,你就会问,什么是span?其实它也与latitude,
longitude有关。如果有一个缩放等级概念那开发的时候就更容易理解。我就收集到与此相关的资料,它使mkmapview有了缩放等级的概念
源码在:
数学上证明:
不明白他说的数学原理没关系,源码直接拿来用也行,呵呵,没有看到他的的license声明,自己改改名字吧。
分享文章:ios开发缩放,苹果app缩放
浏览地址:http://scyanting.com/article/dsihejg.html