精华内容
参与话题
问答
  • ios开发

    千次阅读 2014-12-25 16:44:01
    iOS 开发过程中,如果需要查看Mac目录中沙盒中的数据,可以参考以下步骤 1,首先确认你的app sandbox目录位置    NSLog(@"sandbox home dir: %@", NSHomeDirectory());  打印内容:  /Users/...

    iOS 开发过程中,如果需要查看Mac目录中沙盒中的数据,可以参考以下步骤


    1,首先确认你的app sandbox目录位置

        

     NSLog(@"sandbox home dir: %@", NSHomeDirectory());

     打印内容:

       /Users/computername/Library/Application Support/iPhone Simulator/7.1/Applications/3766700E-1C60-44DE-B5CC-21669C84C1DE


    2,复制上面的目录在Finder中“前往-前往文件夹”即可


    3,如果第二部没有看到文件夹内容,有可能是文件被隐藏了,可以在命令行中执行命令

    显示:defaults write com.apple.finder AppleShowAllFiles -bool true
    隐藏:defaults write com.apple.finder AppleShowAllFiles -bool false 



    展开全文
  • iOS开发学习路线

    千次阅读 2018-04-23 09:37:26
    初级iOS开发iOS中级开发说白了,就是你学会了基本的UI界面搭建,上架,沉淀一段时间,你觉得自己还适合这门行业,还适合,还能接受 这个所谓的iOS开发工程师的行业.你就可以说是一名中级iOS开发. 这个沉淀时间 大约在1年...

    初级iOS开发

    iOS中级开发说白了,就是你学会了基本的UI界面搭建,上架,沉淀一段时间,你觉得自己还适合这门行业,还适合,还能接受 这个所谓的iOS开发工程师的行业.你就可以说是一名中级iOS开发.
    这个沉淀时间 大约在1年的实际工作中,就可以完成.
    如果你觉得这门行业不适合你,请仔细结合自身情况,是否转另一门计算机语言,还是彻底转行.
    是否了解AFNetworking 的实现原理
    是否了解SDAutolayout/Masonry 一种布局库的原理
    是否能够处理基本的iOS崩溃原因/无法编译原因/无法上架原因?
    是否拥有了一定的工作效率,稳定的工作效率.(而不是说,上面派了一个活下来,忙都忙不完,天天加班,还一堆bug)
    是否能够处理第三方库引起的崩溃.
    是否可以很好的融入工作环境,完成每一阶段的工作指标,而不会让自己疲惫不堪.
    Xcode的使用
    第三方库的灵活使用
    AFN
    MJRefresh
    各种网站的使用
    说明:作为一名初级的iOS开发,你需要具备以下技能
    必备技能(全部都会的情况下查看下一项)
    如何判断是否可以升阶
    结论

    中级iOS开发

    如何判断是否可以升阶
    结论
    应用的内存处理
    应用的推送处理
    应用的模块化/单元测试
    应用的第三方集成/集中化管理/稳定迭代
    阅读强大的第三方源码/拥有快速上手新的第三方库的能力.
    能够接受各种新功能的开发(这里是指,即使你没有做过,但是你仍然可以凭借着学习,解决任何业务需求:例如:蓝牙.AR.摄像头.硬件交互.等)
    清楚明白数据的传递方式,应用与后台如何交换数据,交换数据的过程,结果,格式.
    多线程的灵活使用.
    各种并发事件的处理/以及界面的合理性/流畅度
    设计模式的灵活使用.
    说明:作为一名中级的iOS开发,你需要具备以下技能
    必备技能(全部都会的情况下查看下一项)

    高级iOS开发

    应用的组件化/架构分层
    数据结构,操作系统,计算机网络都有自己的了解和认知
    Shell脚本/python/Ruby/JS 至少会一种.
    说明:作为一名高级的iOS开发,你需要具备以下技能(我不是高级开发,所以这里只能给你们提供建议.)
    必备技能

    详细学习路线

    学习路线
    简介
    这里只简单阐述一些概念性的东西,以及学习路线规划,真正的知识请从iOS基础知识点往下开始看.
    Objective-C
    介绍
    概念
    编译原理
    程序启动原理
    结束程序.
    监听系统事件
    Info.plist
    .pch
    App组成
    打开程序
    执行main函数
    执行UIApplicationMain函数
    初始化UIApplication(创建设置代理对象,开启事件循环)
    语法.(此处定义可能略失严谨,口头教学为主)
    基础语法
    对象.
    属性
    数据类型
    方法
    继承
    Frame/CGRect/CGPoint和CGSize
    内存(针对MRC下情况进行介绍)
    ARC/MRC
    弱引用/强引用
    Assign,retain,copy,strong
    import 和@class的区别
    Xcode使用
    首先是针对Xcode菜单栏,希望自己可以去翻译一下每个菜单里每项功能的英文都是什么意思,有助于自己熟悉并加深印象的使用Xcode.
    熟悉Xcode的各个功能.
    UIKit控件.
    界面分析(下载App进行学习).
    界面适配
    在这里推荐有兴趣的开发人员,下载并分析,AppStore中的每项分类的top50的应用,多学习大公司以及流行应用是如何开发应用的,其中流行的,新颖的开发界面的方式可以总结下来,猜想在大应用中,别的程序员是如何开发的.
    代码架构.
    代码架构文章推荐:https://casatwy.com/iosying-yong-jia-gou-tan-kai-pian.html
    各种工具、第三方的使用.
    其实每个项目的建立都大致分为:项目框架搭建,原生界面搭建,嵌入第三方库.有很多功能都会用到第三方库,大多数第三方库都是本着快速开发,完整功能实现的目的存在的.需要开发人员能够根据业务逻辑不同,选择最好最优质的第三方库进行使用.
    代码封装
    当使用较多第三方库后,要求开发人员学习其开发特点,以及其封装手法,运用在自己的项目上,封装自己的代码.灵活运用.
    完整项目.
    开发技巧
    个人心得

    iOS基础知识点

    iOS基础知识点
    如何学习iOS
    开始涉猎不止于iOS领域中的知识,会去了解相关职位的基础知识,例如前端和后台或者服务器运维,或者项目相关知识,具体往自己的职业规划靠拢
    多看开源或者注明的第三方库.
    收藏并阅读各种大神的博客或者论坛.
    开始考虑项目中的细节优化,内存处理和耗电情况
    打好基础,学习OC中各种常用语法.
    学习如何上架,上架会因为什么被拒,了解App上架规则.
    多学习官方说明文档.
    刚刚入门(如何学习)
    刚刚入职1年(如何稳定)
    入职3年(如何进阶)
    框架的学习
    AFNetworking
    SDAutoLayout
    YYKit
    SDWebImage
    MJRefresh
    MJExtension
    Bugly
    Qiniu
    Masonry
    TZImagePickerController
    Hyphenate_CN
    第三方框架
    苹果自带框架
    基础UI控件
    UILabel 标题栏
    UIButton 按钮
    UIImageView 图片视图
    UITextField 文本输入框
    UITextView 文本展示视图
    UIProgressView 进度条
    UISlider 滑动开关
    UIGesture 手势
    UIActivityIndicator 菊花控件
    UIAlertView(iOS8废除) 警告框
    UIActionSheet(iOS8废除) 操作表单
    UIAlertController(iOS8出现) 警告视图控制器
    UIScrollView 滚动视图
    UIPageControl 页面控制器
    UISearchBar 搜索框
    UITableView 表视图
    UICollectionView集合视图
    UIWebView网页浏览器
    UISwitch开关
    UISegmentControl选择按钮
    UIPickerView选择器
    UIDatePicker日期选择器
    UIToolbar工具栏
    UINavigationBar通知栏
    UINavigationController通知视图控制器
    UITabbarController选择视图控制器
    UIImagePickerController相册
    UIImage图片
    Xcode的使用
    内存监测
    全局断点
    全局搜索替换
    界面适配
    StoryBoard
    界面预览
    基础操作 状态栏
    偏好设置
    Xcode Source Control 源代码管理器
    Xcode workSpace工作组
    Xcode Scheme 计划
    Xcode AutoLayout 约束
    Xcode CoreData数据库
    LLDB 断点调试
    数据存储
    沙盒存储
    NSDictionary归档
    NSUserDefault
    CoreData
    NSKeyedArchiver
    SQLite
    FMDB
    plist
    App生命周期
    alloc
    init
    创建View
    ViewDidLoad
    ViewWillAppear
    ViewDidAppear
    ViewWillDisappear
    ViewDidDisappear
    视图将要消失 (做一些视图将要消失时的UI的处理)
    视图已经消失 (做一些视图消失之后数据的处理)
    viewDidDisappear销毁定时器
    dealloc
    didReceiveMemoryWarning
    控制器生命周期
    应用生命周期
    开发者账号&上架流程
    个人
    公司
    企业
    https://www.jianshu.com/p/6601a241da8e
    https://www.jianshu.com/p/7c98651d3532
    https://www.jianshu.com/p/9b994a019ee6
    文章推荐:
    常用知识
    响应链
    异常捕捉
    国际化
    代码模块化
    类别/扩展
    iPad与iPhone的区别
    静态库
    内存管理
    Quartz2D
    真机调试
    isKindOfClass 与 isMemberOfClass
    Return/Break/Continue
    Core Animation
    CALayer
    AutoLayout
    KVC/KVO
    谓词NSPredicate
    帧动画
    界面旋转+状态栏隐藏
    plist文件
    通信
    NS系列
    宏定义
    视图层次
    切换视图
    深浅拷贝
    对象序列化
    写入文件
    获取沙盒路径
    翻转视图
    延伸视图
    九大基本数据类型
    九宫格
    坐标比较
    UIColor 、CIColor和CGColor 之间的关系
    画图
    静态变量
    tag值
    延时执行方法

    中级知识点

    设计模式
    UIScrollView/UITableView/UICollectionView 的嵌套
    动态行高
    通知/代理/block
    程序启动原理
    触摸事件/手势
    图文混编
    Runtime
    NSRunLoop
    GCD
    ReactiveCocoa开发
    3DTouch
    界面渲染
    Charles花瓶抓包
    区分模拟器/真机项目
    常用知识
    Block
    蓝牙/传感器
    物理仿真器UIDynamic
    通讯录获取
    音频/视频/二维码
    真机调试
    苹果内购/广告
    推送/远程推送
    单例模式
    多线程
    网络请求
    定位
    源代码管理Git

    iOS高级知识点

    iOS高级知识点
    Socket
    XMPP
    加密
    MD5详解
    Base64加密解密
    RSA非对称加密
    AES对称加密
    音频
    基础
    Core Audio
    Audio Toolbox
    OpenAL
    AVFoundation
    Speex语音聊天
    AudioQueue/AudioSession
    Speex简介
    视频
    AAC视频.H264推流
    P2P传输
    直播
    RTMP协议
    RTMP直播应用与延时分析
    如果做一款inke版的App
    推流发布和播放RTMP
    FFmpeg
    基于FFmpeg的推流器
    HLS流媒体传输协议(HTTP Live Streaming)
    FFmpeg
    ijkPlayer
    直播的技术分析与实现
    算法
    简介
    冒泡排序
    快速排序
    插入排序
    归并排序
    二分查找
    希尔排序
    动态规划
    堆排序

    官方Kit

    ARKit.
    SiriKit
    HealthKit
    HomeKit
    SearchKit
    IOKit
    PDFKit
    CloudKit
    GameplayKit
    SpriteKit
    SceneKit
    MusicKit
    ResearchKit
    MapKit
    StoreKit
    AVKit

    展开全文
  • iOS开发指南》(第二版 iOS7)源码

    千次下载 热门讨论 2014-03-20 11:11:59
    ios开发指南:从零基础到app store上架(第2版)》采用全新的ios 7 api,详细介绍了最新的ios 7 开发相关的知识点。本书共分为4 个部分:第一部分为基础篇,介绍了ios 的一些基础知识;第二部分为网络篇,介绍了ios ...
  • IOS开发从入门到精通-第一章

    千人学习 2018-04-08 22:16:23
    本课程详细介绍了IOS开发环境搭建及开发工具的使用,讲解了IOS开发常用视图控件的使用 ,还讲解了一个实用的功能实例:APP启动引导页的开发。
  • iOS开发教程之OC语言

    万人学习 2015-04-01 18:25:25
    Objective-C是扩充C的面向对象编程语言,iOS开发是用的Objective-C语言,本专题更系统的讲解Objective-C语言当中的一些要点,类的封装、基本数据结构(NSString、NSData)、继承、内存管理(retain点语法、MyArray、...
  • iOS开发之Objective-C编程基础

    万人学习 2015-06-25 13:51:14
    本系列课程视频提供iOS培训之Objective-C基础视频,第一个Obj-C程序 Hello world,面向对象编程,面向过程编程,类和对象,self使用详解, property基础,synthesize基础,...学生从零开始iOS开发的优质视频教程。
  • IOS开发界面设置指南-IOS开发

    千次阅读 多人点赞 2012-03-12 14:48:56
    IOS开发界面设置指南 http://download.csdn.net/detail/iukey/4133785
    展开全文
  • iOS 13 黑暗模式总结探索 暗黑模式苹果开发文档 如何不进行系统切换样式的适配 注意 同一工程内多个Assets文件在打包后,就会生成一个Assets.car 文件,所以要保证Assets内资源文件的名字不能相同 苹果官方...

    导读:
    Material Design & iOS 13 黑暗模式总结探索

    暗黑模式苹果开发文档

    如何不进行系统切换样式的适配

    注意

        同一工程内多个Assets文件在打包后,就会生成一个Assets.car 文件,所以要保证Assets内资源文件的名字不能相同。
        苹果官方强烈建议适配暗黑模式(Dark Mode)此功能也是为了开发者能慢慢将应用适配暗黑模式,所以想通过此功能不进行适配暗黑模式,预计将会被拒。
    

    暗黑模式的优点:

    • 省电
    • 沉浸式效果明显
      深色背景的优势是可以突出与我们主要交互操作的内容,弱化其他辅助元素并降低屏幕整体的亮度减少视觉压力。

    全局关闭暗黑模式

    在Info.plist 文件中,添加UIUserInterfaceStyle key 名字为 User Interface Style 值为String, 将UIUserInterfaceStyle key 的值设置为 Light

    单个界面不遵循暗黑模式

    UIViewController与UIView 都新增一个属性 overrideUserInterfaceStyle
    overrideUserInterfaceStyle 设置为对应的模式,则强制限制该元素与其子元素以设置的模式进行展示,不跟随系统模式改变进行改变

    • 设置 ViewController 的该属性, 将会影响视图控制器的视图和子视图控制器采用该样式
    • 设置 View 的该属性, 将会影响视图及其所有子视图采用该样式
    • 设置 Window 的该属性, 将会影响窗口中的所有内容都采用样式,包括根视图控制器和在该窗口中显示内容的所有演示控制器(UIPresentationController)

    如何在代码里进行适配颜色(UIColor)

    + (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    - (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    
    
    

    e.g.

    [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trait) {
        if (trait.userInterfaceStyle == UIUserInterfaceStyleDark) {
            return UIColorRGB(0x000000);
        } else {
            return UIColorRGB(0xFFFFFF);
        }
     }];
    

    系统调用更新方法,自定义重绘视图

    当用户更改外观时,系统会通知所有window与View需要更新样式,在此过程中iOS会触发以下方法

    UIView
    traitCollectionDidChange(_:)
    layoutSubviews()
    draw(_:)
    updateConstraints()
    tintColorDidChange()
    
    UIViewController
    traitCollectionDidChange(_:)
    updateViewConstraints()
    viewWillLayoutSubviews()
    viewDidLayoutSubviews()
    
    UIPresentationController
    traitCollectionDidChange(_:)
    containerViewWillLayoutSubviews()
    containerViewDidLayoutSubviews()
    

    适配Dark Mode

    • 颜色适配
    • 图片适配

    1 颜色适配

    • iOS13系统动态颜色

    iOS13 之前 UIColor只能表示一种颜色,而从 iOS13 开始UIColor是一个动态的颜色,在LightModeDark Mode可以分别设置不同的颜色。
    iOS13系统提供了一些动态颜色

    @property (class, nonatomic, readonly) UIColor *systemBrownColor        API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    @property (class, nonatomic, readonly) UIColor *systemIndigoColor       API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    @property (class, nonatomic, readonly) UIColor *systemGray2Color        API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *systemGray3Color        API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *systemGray4Color        API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *systemGray5Color        API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *systemGray6Color        API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *labelColor              API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    @property (class, nonatomic, readonly) UIColor *secondaryLabelColor     API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    @property (class, nonatomic, readonly) UIColor *tertiaryLabelColor      API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    @property (class, nonatomic, readonly) UIColor *quaternaryLabelColor    API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    @property (class, nonatomic, readonly) UIColor *linkColor               API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    @property (class, nonatomic, readonly) UIColor *placeholderTextColor    API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    @property (class, nonatomic, readonly) UIColor *separatorColor          API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    @property (class, nonatomic, readonly) UIColor *opaqueSeparatorColor    API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    @property (class, nonatomic, readonly) UIColor *systemBackgroundColor                   API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *secondarySystemBackgroundColor          API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *tertiarySystemBackgroundColor           API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *systemGroupedBackgroundColor            API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *secondarySystemGroupedBackgroundColor   API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *tertiarySystemGroupedBackgroundColor    API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *systemFillColor                         API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *secondarySystemFillColor                API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *tertiarySystemFillColor                 API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    @property (class, nonatomic, readonly) UIColor *quaternarySystemFillColor               API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
    
    
    
    

    ① 实例

    [self.view setBackgroundColor:[UIColor systemBackgroundColor]];
    [self.titleLabel setTextColor:[UIColor labelColor]];
    [self.detailLabel setTextColor:[UIColor placeholderTextColor]];
    

    效果展示
    在这里插入图片描述
    用法和iOS13之前的一样,使用系统提供的这些动态颜色,不需要其他的适配操作

    • 自定义动态UIColor
      在实际开发过程,系统提供的这些颜色还远远不够,因此我们需要创建更多的动态颜色

    初始化动态UIColor方法

    iOS13 UIColor增加了两个初始化方法,使用以下方法可以创建动态UIColor
    注:一个是类方法,一个是实例方法

    + (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    - (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
    
    
    
    • 这两个方法要求传一个block进去
    • 当系统在LightModeDarkMode之间相互切换时就会触发此回调
    • 这个block会返回一个UITraitCollection
    • 我们需要使用其属性userInterfaceStyle,它是一个枚举类型,会告诉我们当前是LightMode还是DarkMode
    typedef NS_ENUM(NSInteger, UIUserInterfaceStyle) {
        UIUserInterfaceStyleUnspecified,
        UIUserInterfaceStyleLight,
        UIUserInterfaceStyleDark,
    } API_AVAILABLE(tvos(10.0)) API_AVAILABLE(ios(12.0)) API_UNAVAILABLE(watchos);
    

    ② 实例

    UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trainCollection) {
            if ([trainCollection userInterfaceStyle] == UIUserInterfaceStyleLight) {
                return [UIColor redColor];
            }
            else {
                return [UIColor greenColor];
            }
        }];
        
     [self.bgView setBackgroundColor:dyColor];
    
    

    效果展示
    在这里插入图片描述

    2 图片适配

    • 打开Assets.xcassets
    • 新建一个Image set
      在这里插入图片描述
    • 打开右侧工具栏,点击最后一栏,找到Appearances,选择Any,Dark
      在这里插入图片描述
    • 将两种模式下不同的图片资源都拖进去
      在这里插入图片描述
    • 使用该图片
    [_logoImage setImage:[UIImage imageNamed:@"icon_logo"]];
    

    在这里插入图片描述
    大功告成,完成了颜色和图片的Dark Mode适配。

    获取当前模式(Light or Dark)

    有时候我们需要知道当前处于什么模式,并根据不同的模式执行不同的操作 iOS13中CGColor依然只能表示单一的颜色通过调用UITraitCollection.currentTraitCollection.userInterfaceStyle获取当前模式

    if (UITraitCollection.currentTraitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
            [self.titleLabel setText:@"DarkMode"];
        }
        else {
            [self.titleLabel setText:@"LightMode"];
        }
        
    

    3. 其他

    1.监听模式切换

    有时我们需要监听系统模式的变化,并作出响应
    那么我们就需要在需要监听的viewController中,重写下列函数

    // 注意:参数为变化前的traitCollection
    - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection;
    
    // 判断两个UITraitCollection对象是否不同
    - (BOOL)hasDifferentColorAppearanceComparedToTraitCollection:(UITraitCollection *)traitCollection;
    
    

    ① 示例

    - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
        [super traitCollectionDidChange:previousTraitCollection];
        // trait发生了改变
        if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {
        // 执行操作
        }
        }
        
    

    2.CGColor适配

    我们知道iOS13后,UIColor能够表示动态颜色,但是CGColor依然只能表示一种颜色,那么对于CALayer等对象如何适配暗黑模式呢?当然是利用上一节提到的监听模式切换的方法啦。

    ① 方式一:resolvedColor

    // 通过当前traitCollection得到对应UIColor
    // 将UIColor转换为CGColor
    - (UIColor *)resolvedColorWithTraitCollection:(UITraitCollection *)traitCollection;
    

    实例

    - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
        [super traitCollectionDidChange:previousTraitCollection];
        
        UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trainCollection) {
            if ([trainCollection userInterfaceStyle] == UIUserInterfaceStyleLight) {
                return [UIColor redColor];
            }
            else {
                return [UIColor greenColor];
            }
        }];
        UIColor *resolvedColor = [dyColor resolvedColorWithTraitCollection:previousTraitCollection];
        layer.backgroundColor = resolvedColor.CGColor;
        
    

    ② 方式二:performAsCurrent

    // 使用当前trainCollection调用此方法
    - (void)performAsCurrentTraitCollection:(void (^)(void))actions;
    

    示例

    - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
        [super traitCollectionDidChange:previousTraitCollection];
        
        UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trainCollection) {
            if ([trainCollection userInterfaceStyle] == UIUserInterfaceStyleLight) {
                return [UIColor redColor];
            }
            else {
                return [UIColor greenColor];
            }
        }];
        [self.traitCollection performAsCurrentTraitCollection:^{
            layer.backgroundColor = dyColor.CGColor;
        }];
        
    }
    
    

    方式三:最简单的方法
    直接设置为一个动态UIColor的CGColor即可

    - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
        [super traitCollectionDidChange:previousTraitCollection];
        UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trainCollection) {
            if ([trainCollection userInterfaceStyle] == UIUserInterfaceStyleLight) {
                return [UIColor redColor];
            }
            else {
                return [UIColor greenColor];
            }
        }];
            layer.backgroundColor = dyColor.CGColor;
    }
    
    
    

    ⚠️!!! 设置layer颜色都是在traitCollectionDidChange中,意味着如果没有发生模式切换,layer将会没有颜色,需要设置一个基本颜色

    3.模式切换时打印log

    • 在Xcode菜单栏Product->Scheme->Edit Scheme
    • 选择Run->Arguments->Arguments Passed On Launch
    • 添加以下命令即可
      UITraitCollectionChangeLoggingEnabled YES
      在这里插入图片描述

    4.强行设置App模式

    当系统设置为Light Mode时,对某些App的个别页面希望一直显示Dark Mode下的样式,这个时候就需要强行设置当前ViewController的模式了

    // 设置当前view或viewCongtroller的模式
    @property(nonatomic) UIUserInterfaceStyle overrideUserInterfaceStyle;
    

    示例

    // 设置为Dark Mode即可
    [self setOverrideUserInterfaceStyle:UIUserInterfaceStyleDark];
    

    ⚠️ 注意!!!

    • 当我们强行设置当前viewControllerDark Mode后,这个viewController下的view都是Dark Mode
    • 由这个ViewController present出的ViewController不会受到影响,依然跟随系统的模式
    • 要想一键设置App下所有的ViewController都是Dark Mode,请直接在Window上执行overrideUserInterfaceStyle
    • window.rootViewController强行设置Dark Mode也不会影响后续present出的ViewController的模式

    5.NSAttributedString优化

    对于UILabel、UITextField、UITextView,在设置NSAttributedString时也要考虑适配Dark Mode,否则在切换模式时会与背景色融合,造成不好的体验

    推荐的做法

    // 添加一个NSForegroundColorAttributeName属性
    NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:16],NSForegroundColorAttributeName:[UIColor labelColor]};
    NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"富文本文案" attributes:dic];
    
    
    

    总结

    总的来说,iOS13主要有以下变化:
    1.支持 Dark Mode
    2.UIColor变为动态颜色
    3.更新StatusBar样式
    4.更新UIActivityIndicatorView样式

    参考文档

    iOS开发如何适配暗黑模式(Dark Mode)
    iOS13 暗黑模式(Dark Mode)适配之OC版

    展开全文
  • iOS9程序设计(顶级iOS开发视频课程-Objective-C版) 本课程主要内容包括: iOS9的基础知识 常用控件 屏幕适配 多窗口 导航 表视图 GPS 地图 网络 数据存储、 音频 视频 本地化等内容,并提供了大量的...
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    千人学习 2017-03-24 13:36:32
    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发
  • UIControl IOS控件编程—IOS开发

    万次阅读 多人点赞 2012-02-28 00:06:03
    声明 欢迎转载,但是请尊重作者劳动成果,转载请保留此框内声明,谢谢。 ... ...UIKit提供了一组控件:UISwitch开关、UIButton按钮、UISegmentedControl分段控件、UISlider滑块、UITextField文本字段控件、...
  • 请问哪里有海康威视ios sdk,或者说我有端口和IP,怎么连接远程摄像头? 先谢谢了!
  • ios开发--基础班视频

    万人学习 2016-06-27 16:10:22
    ios开发基础班视频涵盖了iOS开发的基础知识,iOS开发产品,iOS开发的模块。
  • iOS开发证书管理

    千次阅读 2017-09-07 23:28:36
    总会报一些错误,有些是语法上的错误,老的代码在新的编译环境下不通过,还有的因为因为签名导致的错误,如常见的错误提示:“Failed to create provisioning profile.”,ios的证书管理是ios开发中必须掌握的技能,...
  • IOS开发之实现App消息推送(最新)

    万次阅读 多人点赞 2014-11-19 21:13:10
    今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6, IOS8, 以及苹果开发者中心最新如何注册应用,申请证书以及下载配置概要文件,相信很多刚开始接触ios的人会很想了解一下。(ps:...
  • iOS开发-iOS10适配开发

    千次阅读 2016-09-14 11:23:11
    从6月份开始iOS10就受到广大开发者的关注,作为一个新的iOS版本,对于开发的要求改动算 是近几年来很大的,近期很多公司都是在加班加点的适配iOS10,因为闪退、崩溃、功能不能 使用等莫名的bug一直出现,个人总结了...
  • 支付宝的保密工作做的太好的,把支付宝SDK隐藏的特别深,我也是找了好大一会才找到官方的sdk,网址:https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId=4#ps-tabinfo-hash
  • iOS开发之Objective-C(中级篇)

    千人学习 2018-02-22 10:49:26
    该系列课程详细的讲解了iOS开发过程中的常用知识点及难点。在此基础上面,还扩充讲解了数据库的和H5的知识。如果能将本系列及基础篇的系列课程掌握的话,可以说几乎完全掌握了OC的知识点,并且在开发过程中会很顺利...
  • iOS开发过程中,解决签名证书莫名失效的一些问题
  • iOS开发之Objective-C(基础篇)

    千人学习 2018-01-23 14:16:13
    该系列课程是iOS开发之Objective-C基础入门视频。课程中会详细的讲解OC语法特点,面向对象的使用,循环引用的问题,block的特点及使用,枚举与结构体,Foundation框架等。是针对初级的入门iOS开发的优质视频。
  • iOS开发 iOS13禁用深色模式

    万次阅读 2019-09-24 15:44:33
    全局禁用深色模式(暗黑模式) 在Info.plist中增加UIUserInterfaceStyle,值为Light,如下 <key>UIUserInterfaceStyle</key> <string>Light</string>...如果想要在某个UIViewController中禁用深色...
  • 丝瓜视频网页版如何删除?丝瓜官网怎么删除? 不小心安了丝瓜视频,描述文件安装了,可是卸载不了了,哪位大神有办法?
  • IOS 开发官方教程(汉化版)

    千次下载 热门讨论 2013-05-07 19:58:34
    IOS 开发官方教程(汉化版)PDF, 内涵环境搭建、Xcode使用、Object-c入门、设计、框架、开发者申请、应用发布等。
  • 安装iOS开发环境Xcode

    千次阅读 2015-07-21 21:04:42
    同时对于Android开发来说,iOS开发的环境搭建是比较方便和简单的。下面来简单介绍如何安装Xcode。 (1)登录App Store,在搜索框中输入Xcode,出现以下界面: 。 (2)选择第一个Xcode,进行安装,可见安装Xc
  • 最近上IOS开发,买不起Mac,黑苹果又实在折腾,只好在Win10的系统上装MacOS虚拟机。 一、资源下载 这里提供我使用的打包好的资源以及最新版下载路径。 百度网盘:链接:MacOS虚拟机百度网盘 提取码: 6ghp。 (1...
  • 作为一名对C++十分熟悉的老程序员,如何快速掌握iOS开发, 斯坦福的iOS在线课程很有名http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-fall 还有这套课程 ...
  • iOS开发打包

    千次阅读 2014-08-04 10:59:57
    ios 开发打包
  •   最近在用到collectionView的时候,由于collectionViewCell尺寸是整个屏幕大小,在滑动的时候发现内容刷新对不上号,排查自己的数据后,发现数据正常无误,后来通过一番搜索发现是ios 10以后优化的重用机制造成的...

空空如也

1 2 3 4 5 ... 20
收藏数 142,437
精华内容 56,974
关键字:

ios开发