今天大多时间都忙着配置Xcode了,我居然今天才知道原来可以借电脑。。。
VideoToolbar实现
我们在视频的每一个cell中加入Toolbar,在公共方法中声明方法layoutWithLabel,然后我们在这个方法内部加载图片、布局
布局方面可以使用NSLayoutConstraint
使用VFL的话只需要这样写即可
@”H:|-15-[ImageView]-0-[label]->=0-[iv1(==ImageView)]-0-[l1]-15-[iv2]-0-[l2]-15-[iv3]-0-[l3]-15-|”;其中>=0表示中间的部分大于等于0,==ImageView表示尺寸大小和第一个相等
调用constraintsWithVisualFormat:options:metrics:views:方法即可返回一个NSLayoutConstraint views:中使用NSDictionaryOfVariableBindings()来插入之前声明的Views
布局框架
一般都是使用语法糖,简化书写
基于Frame
Mamaral / Facade
Mamaral / neon swift
基于AutoLayout
Masonry PureLayout snapKit
第三方布局
Yoga(基于FlexBox) 跨平台布局
Storyboard也可以实现布局,但是有很多弊端,不能很好的转化成代码,无法追踪,无法组件复用,动态变化逻辑不好实现sizeClass适配不好等问题
iOS适配
- 位置、大小、文字的适配:是否按照比例扩大
- 图片资源适配:2x 3x以及资源管理
- iPhoneX适配:safeArea交互
逻辑分辨率
代表物理上面的大小和距离等
适配:
- 按比例扩大缩小,一般以iPhone6作为标准
- 大屏幕显示更多内容/保证左右的边距
UIScreen & UIDevice
UIScreen 提供size/亮度/坐标系等
UIDevice 获取设备信息,操作系统,设备Model,设备方向/电量等
四个方向分别为
- UIDeviceOrientationPortrait
- UIDeviceOrientationPortraitUpsideDown
- UIDeviceOrientationLandscapeLeft
- UIDeviceOrientationLandscapeRight
在编写的时候要判断是不是横屏,因为bounds的width和height哪个才是长宽无法确认
#define IS_LANDSCAPE (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication] statusBarOrientation]))
#define SCREEN——WIDTH (IS_LANDSCAPE ?:)
可以写一个UIAdapter,来将当前设备和基准值进行一个缩放的操作
一般的App都会有这样的宏
#define UI(x) UIAdapter(x)
#define UIRect(x,y,width,height) UIRectAdapter(x,y,width,height)
我们只需要把两个对应方法采用对应的static inline函数来实现即可
在编程的时候将所有的CGRectMake更改为UIRect即可进行适配
物理分辨率
表示像素点数,分辨率。基于逻辑分辨率和逻辑分辨率的关系,可能需要采用缩放因子2x,3x等
图片的适配就需要使用物理分辨率,否则会出现图片的逻辑大小不一的情况,因而图片资源需要提供不同像素数,保证逻辑大小一致
本地图片提供的时候需要提供多种像素大小的图片,并使用@2x,@3x作为后缀区分,系统会自动给我们适配,如果不指定的话默认是1x
但是我们为了清晰度最好指定一下不同物理分辨率下图片的2x还是3x
本地图片适配与存储
Bundle
- 方便管理和Debug
- 删除和使用脚本
- 物理层面具有更高的灵活性
- 代码上通过语法糖实现特殊逻辑
ImageAsset
- 应用系统瘦身App thining,因为我们可以根据系统来在打包的时候自动选择图片
- 不用写后缀,直接使用名字读取
- 方便管理,直观显示
- 改变颜色
ImageAsset可以让系统自动分配图片,在项目目录的Assets.xcassets文件夹下进行图标的配置
此时我们在使用UIImage的时候就可以直接使用文件名即可成功调用
iphoneX适配
Status bar的竖屏20 -> 44 横屏20
HomeIndicator的竖屏 34 横屏 21
需要让出一部分距离
对于Frame布局,提供了safeAreaInsets
对于AutoLayout布局,提供了safeAreaLayoutGuide,是一个虚拟的基准坐标系
其他情况也可以通过宏获取statusBar高度
我们可以通过屏幕的大小和缩放因子来判断机型,可以实现一部分类方法来判断
UIView中的contentInsetAdjustmentBehavior是一个是否选择适配的属性
我们可以设置成Never来自己进行适配,在大工程中是没有这个属性的,所以我们需要进行自己适配
适配方案选择
位置大小文字适配
- 苹果官方Human Interface Guidelines
- 更大设备显示更多内容
- 等比放大 以iPhone6作为基准设计尺寸
- iPhoneX 系列特殊的UI和交互
资源适配
- 物理方面是资源的适配,使用@2x@3x等图片 / 网络数据处理等
- pdf矢量图
- 使用合适的图片管理方式(Bundle / Asset)
0 条评论