今天大多时间都忙着配置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)
分类: IOS实习

0 条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注