说到storyboard,我们第一时间就是想到的它代码合并的难度问题。其实还有一个问题就是,如果需要同时开发iPhone和iPad版本的话。
我们常常需要两套尺寸不一样的Storyboard,或者在同一个Storyboard场景上添加不同的identifier来区别开来。
那如果我们能用一套来同时表示,那不就是更好了么?
首先可以参考这个修改,将iPhone和iPad的storyboard设置成一种形式:
http://blog.csdn.net/kmyhy/article/details/28428227
并且我们需要用大的尺寸来表示iPhone的(即iPad版本的资源来表示),因为大缩成小可以,但是小放大成大就会失真
如果是全屏的展示界面的话,是非常好修改的,因为全屏的缩放比较简单,统一由大缩小即可。
但是如果Storyboard中的展示界面是非全屏的,我们该怎么做?
我们可以用CGAffineTransform来修改
CGAffineTransform controllerTransform = CGAffineTransformScale(controller.view.transform, self.autoScaleSize, self.autoScaleSize); [controller.view setTransform:controllerTransform]; 而难点就是这个 self.autoScaleSize 的确定的问题了根据市面上iPhone的尺寸基本可以确定为以下:
320*640
375*667
414*736
假设我们想展示的视图是占空间并不大的一个位置,并且随着屏幕尺寸的增大而增大,我们可以用根据屏幕尺寸的比例来扩大
我们也可以用下面的方式,假设我们在Storyboard的视图是470尺寸的
self.autoScaleSize = width / 320.0f * 0.65; //缩放比例, 以ipad为准 self.autoScaleSize = (self.autoScaleSize<1?self.autoScaleSize:1.0f); 以320为最小基准,例如,320为例子计算:320/320 * 0.65 = 0.65
因为小于1,即就是所要的缩放系数,470*0.65 = 305.5
所以在iPhone4/4s/5/5s 上展示的界面就是305.5的尺寸
如果以iPhone6/6s/7 的尺寸 375的计算是怎样?
375/320 * 0.65 = 0.76
0.76 * 470 = 358
那在iPhone6/6s/7 上展示的就是358的尺寸
但是如果是iPad这种大尺寸的呢,那这样无限的展大不就是有点太大了么,所以我们可以限定一个最大值,就是1
如果 width /320 * 0.65 大于一,我们则取一
这样就相当于展示了原本Storyboard所要展示的尺寸了~~
总结:
iPhone iPad 公用一套资源是相对比较好解决的,但是如果是用一套资源的尺寸去表示两者的话,就需要采取这类型缩放的做法了