IOS开发学习日记(十四)

目录​​​​​​​

布局框架的选择

布局方式的选择

逻辑分辨率适配

逻辑分辨率

UIScreen&UIDevice

简单的屏幕逻辑分辨率适配

物理分辨率适配

物理分辨率

图片的适配

使用ImageAsset管理图片资源

IOS开发适配常用方法


布局框架的选择

语法糖,简化书写:

        基于Frame的开源框架

                ·mamaral/Facade

                ·mamarl/neon swifit

        基于AutoLayout的开源布局框架

                ·Masonry       

                ·PureLayout

                ·snapKit

第三方布局:

        Yoga(基于FlexBox)跨平台布局

布局方式的选择

两个维度的选择:

        ·Frame/AutoLayout

        ·代码/StoryBoard

StoryBoard可视化

        ·多人合作版本管理和追踪不便

        ·组件复用不便展示

        ·复杂的、动态变化的逻辑

        ·sizeClass适配

逻辑分辨率适配

·位置、大小、文字的适配:是否按比例扩大

·图片资源适配:2x 3x以及资源管理

·safeArea/交互

逻辑分辨率

用于描述显示的单位,只是直观的反映大小和距离

逻辑分辨率的适配:按比例扩大缩小,大屏幕显示更多内容,保证左右边距

UIScreen&UIDevice

·获取设备的逻辑尺寸 - UIScreen

        ·基于硬件显示的相关属性

        ·[UIScreen mainScreen]

简单的屏幕逻辑分辨率适配

//
//  GSCScreen.h
//  GSCApp1
//
//  Created by gsc on 2024/6/13.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN


#define IS_LANDSCAPE (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]))

#define SCREEN_WIDTH (IS_LANDSCAPE ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT (IS_LANDSCAPE ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height)

#define UI(x) UIAdapter(x)
#define UIRect(x,y,w,h) UIRectAdapter(NSInteger x,NSInteger y, NSInteger w,NSInteger h)

//'statusBarOrientation' is deprecated: first deprecated in iOS 13.0 - Use the interfaceOrientation property of the window scene instead. 

static inline NSInteger UIAdapter (float x){
    UIScreen *mainScreen = [UIScreen mainScreen];
    CGFloat screelLogicalWidth = mainScreen.bounds.size.width;
    CGFloat scale = screelLogicalWidth / SCREEN_WIDTH;
    return (NSInteger)x / scale;
}

static inline CGRect UIRectAdapter(NSInteger x,NSInteger y, NSInteger w,NSInteger h){
    return CGRectMake(UIAdapter(x), UIAdapter(y), UIAdapter(w), UIAdapter(h));
}



@interface GSCScreen : NSObject

@end

NS_ASSUME_NONNULL_END

        ·主要提供 size / 亮度 / 坐标系等

·获取设备等信息 - UIDevice

        ·操作系统 / 设备Model

        ·[UIDevice currentDevice]

        ·设备方向 / 电量等

·设备方向

        ·常用的四个方向 / 系统自动设置

        ·获取设备的方向,常用StatusBar方向

设备逻辑/物理分辨率:Layout | Apple Developer Documentation

物理分辨率适配

物理分辨率

·分辨率 / 像素 

        ·像素点点数

        ·分辨率高 - 色彩更丰富 - 清晰度更高

·缩放因子

        ·逻辑像素和物理像素的关系

                在单位逻辑像素上容纳物理像素的个数

        ·3x 的缩放采样

图片的适配

·相同的逻辑距离需要更多的像素来展示

        ·矢量数据 / 非矢量数据

        ·图片资源需要提供不同像素数,保证逻辑大小一致

·本地图片 需要提供多种像素大小的图片

        ·使用@2x @3x作为后缀区分

·网络图片根据scale重新生成

initWithCGImage:scale:orientation

使用ImageAsset管理图片资源

Bundle:

        ·方便管理和debug

        ·删除和使用脚本

        ·物理层面更高的灵活性

        ·代码上通过语法糖实现特殊逻辑

ImageAsset

        ·系统应用瘦身App thinning

        ·不用谢后缀,直接使用名字读取

        ·方便管理,直观展示

        ·改变颜色

IOS开发适配常用方法

·位置大小文字适配

        ·苹果官方Human Interface Guidelines :入门指南 | Apple Developer Documentation

        ·更大设备显示更多内容

        ·等比放大

·资源适配

        ·使用@2x @3图片 / 网络数据处理

        ·pdf 矢量图

        ·使用合适的管理图片方式(Bundle / Asset)

  • 23
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我真的学不会了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值