ios 订阅
iOS是由苹果公司开发的移动操作系统 [1]  。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样,属于类Unix的商业操作系统。原本这个系统名为iPhone OS,因为iPad,iPhone,iPod touch都使用iPhone OS,所以2010年WWDC大会上宣布改名为iOS(iOS为美国Cisco公司网络设备操作系统注册商标,苹果改名已获得Cisco公司授权)。2016年1月,随着iOS 9.2.1版本的发布,苹果修复了一个存在了3年的漏洞 [2]  。2018年9月22日,美国苹果公司在最新的操作系统中秘密加入了基于iPhone用户和该公司其他设备使用者的“信任评级”功能。 展开全文
iOS是由苹果公司开发的移动操作系统 [1]  。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样,属于类Unix的商业操作系统。原本这个系统名为iPhone OS,因为iPad,iPhone,iPod touch都使用iPhone OS,所以2010年WWDC大会上宣布改名为iOS(iOS为美国Cisco公司网络设备操作系统注册商标,苹果改名已获得Cisco公司授权)。2016年1月,随着iOS 9.2.1版本的发布,苹果修复了一个存在了3年的漏洞 [2]  。2018年9月22日,美国苹果公司在最新的操作系统中秘密加入了基于iPhone用户和该公司其他设备使用者的“信任评级”功能。
信息
软件语言
Swift,Objective-C、C、C++
软件大小
1.2 GB
开发商
Apple - 苹果
软件授权
仅苹果移动设备使用
更新时间
2020年7月16日
中文名
苹果移动设备操作系统
最新正式版
iOS 13.6(17G68)
全    称
iPhone Operation System
最新测试版
iOS 14.0 Beta3(18A5332f)
外文名
iOS
iOS发展历程
2007年1月9日苹果公司在Macworld展览会上公布,随后于同年的6月发布第一版iOS操作系统,最初的名称为“iPhone Runs OS X”。2007年10月17日,苹果公司发布了第一个本地化iPhone应用程序开发包(SDK),并且计划在2月发送到每个开发者以及开发商手中。2008年3月6日,苹果发布了第一个测试版开发包,并且将“iPhone runs OS X”改名为“iPhone OS”。2008年9月,苹果公司将iPod touch的系统也换成了”iPhone OS“。2010年2月27日,苹果公司发布iPad,iPad同样搭载了”iPhone OS”。这年,苹果公司重新设计了“iPhone OS”的系统结构和自带程序。2010年6月,苹果公司将“iPhone OS”改名为“iOS”,同时还获得了思科iOS的名称授权。2010年第四季度,苹果公司的iOS占据了全球智能手机操作系统26%的市场份额。2011年10月4日,苹果公司宣布iOS平台的应用程序已经突破50万个。2012年2月,应用总量达到552,247个,其中游戏应用最多,达到95,324个,比重为17.26%;书籍类以60,604个排在第二,比重为10.97%;娱乐应用排在第三,总量为56,998个,比重为10.32%。2012年6月,苹果公司在WWDC 2012上发布了iOS 6,提供了超过200项新功能。2012年9月20日,苹果发布iOS 6正式版,本次更新拥有超过200项新功能。这其中尤其加强了针对中国用户的定制功能,包括Siri开始支持中文语言,系统整合新浪微博、163邮箱等方面。 [3]  2013年6月10日,苹果公司在WWDC 2013上发布了iOS 7,几乎重绘了所有的系统App,去掉了所有的仿实物化,整体设计风格转为扁平化设计。将于2013年秋正式开放下载更新。 [4]  2013年9月19日,苹果发布iOS 7正式版,带来超过200项全新功能。 [5]  2014年6月3日(西八区时间2014年6月2日),苹果公司在WWDC 2014上发布了iOS 8,并提供了开发者预览版更新。 [6]  2014年9月17日,苹果发布iOS 8正式版。 [7]  2015年9月17日,苹果发布iOS 9正式版。 [8]  2016年9月14日,苹果发布iOS 10正式版,这是苹果推出移动操作系统以来最大的一次更新,尤其增加了很多特别适应中国国情的功能,比如骚扰电话识别、苹果地图进一步本地化等。 [9-10]  2017年9月20日,苹果发布iOS 11正式版,iOS 11为iPad带来了更强大的生产力,具体是通过新的Dock栏、文件App、多任务处理、拖拽等功能来实现的。另外,iOS 11重要的一项新功能便是AR功能,这使得该平台成为世界最大的AR平台,用户只需用手机便可享受AR的无穷乐趣。除此之外,iOS 11还带来了更生动更有趣的Live Photo、相机扫码、App Store、控制中心、锁屏、勿扰模式等。 [11-12]  2018年9月18日,苹果发布iOS 12正式版,主要为旧iPhone设备带来性能提升,以及带来了部分全新功能。 [13-14]  2018年9月13日,2018苹果秋季新品发布会上,苹果CEO库克介绍了苹果生态的一些数据。他表示,搭载苹果iOS系统设备已达20亿部。 [15]  2019年9月11日,苹果宣布于2019年9月19日推送iOS 13正式版,支持iPhone 6S及后续机型。 [16]  2019年6月4日,苹果公司在WWDC 2019上发布了iOS 13。2019年9月20日,苹果发布iOS 13正式版,iOS 13推出的"深色"模式为iPhone带来了全然不同的新风格,提供了浏览和编辑照片的全新方式,并新增了保护隐私的登录方式,轻点一下即可登录App和网站。iOS 13速度更快、响应更迅速。系统经整体优化后,App启动速度提升、App下载大小缩减,同时面容ID也变得更快。 [17-18]  2019年9月25日,苹果发布iOS 13.1正式版,实现了诸多问题修复和功能改进,包括iPhone 11、iPhone 11 Pro和iPhone 11 Pro Max上采用超宽频技术的隔空投送、快捷指令App中建议的自动化操作,以及地图App中的共享到达时间。 [19]  美国西部时间2019年9月27日上午10点(北京时间28日凌晨一点),苹果发布了iOS 13.1.1 / iPadOS 13.1.1 正式版更新。 [20]  2019年10月29日,苹果发布iOS 13.2正式版,在iPhone 11、iPhone 11 Pro和iPhone 11 Pro Max上推出了先进的图像处理系统Deep Fusion,它使用A13仿生神经网络引擎拍摄纹理及细节更出众、低光环境下噪点更少的照片。其他功能包括更新和新增的表情符号、AirPods信息播报,并支持AirPods Pro、HomeKit安全视频、具有HomeKit功能的路由器以及新的Siri隐私设置。本更新还包括错误修复和改进。 [21]  2019年12月11日,苹果发布iOS 13.3正式版,包括了改进和错误修复,并在“屏幕使用时间”中新增了更多家长控制。根据苹果发布的最新支持文档,iOS 13.3正在进行改进以最大程度地减少信息App中的垃圾短信等内容。 [22]  2020年3月18日,苹果宣布将于北京时间3月25日为iPhone、iPad和iPod touch用户推送iOS 13.4和iPadOS 13.4正式版。除了重新设计的邮件工具栏和iCloud文件夹共享功能之外,iPadOS 13.4还为iPad平台带来触控板和鼠标支持。 [23]  2020年3月19日,苹果发布iOS 13.4 Beta6(GM版),此前iOS 13.4/iPadOS 13.4已经历经了5次Beta预览测试。Golden Master版本(最终测试版)的出现意味着iOS 13.4正式版到来,优先面向开发者/公开测试版渠道用户推送。而最广泛的iOS 13.4/iPadOS 13.4正式版将在3月25日面向普通用户推送。 [24]  2020年3月25日,苹果发布iOS 13.4正式版,在此次更新中苹果主要推出了新的拟我表情贴纸和从“文件”App共享iCloud云盘文件夹的功能,同时iPad更新后支持搭配使用鼠标和触控板了。 [25]  2020年5月21日,苹果发布iOS 13.5正式版,iOS 13.5加快了配备面容ID的设备在用户佩戴口罩时显示密码栏的速度,并加入了“暴露通知”API以支持来自公共卫生管理机构的COVID-19接触追踪App。本更新还增加了控制FaceTime群聊期间视频拼贴自动突显的选项并包括错误修复和其他改进。 [26]  2020年7月16日,苹果发布iOS 13.6正式版,iOS 13.6支持数字车钥匙,并在“健康”App中包含新的症状类别。本更新还包括错误修复和改进。 [27]  2020年6月23日,苹果公司在WWDC 2020上发布了iOS 14,它为iOS主屏幕带来了多年来最大的变化:小插件。 [28]  Java [6]  苹果仍没有宣布任何让iPhone运行Java的计划。但太阳微系统已宣布其将会发布能在iPhone上运行的Java虚拟机(JVM)的计划,它是基于Java的Micro Edition版本。这将让用Java应用程序得以在iPhone和iPod Touch上运行。在这个计划发表之后,熟悉iOS软件开发协议的程序员们相信虽然iOS软件开发协议不允许应用程序后台运行(比如说在接电话的时候仍然运行程序), 但却允许自带的应用程序从其他的来源下载代码,而且它们还能与第三方应用程序相互作用(比如说Safari和Java虚拟机), 这可能会阻碍不与苹果合作的Java虚拟机的发展。 很明显,在iPhone运行的Java在iOS软件开发协议所规定的范畴以外。FlashiOS不支持Flash。Adobe计划在iPhone发行第三方Flash Lite软件程序,但现时仍未有计划。以现时来说,只支持标准Flash。现时可以使用iPhone第三方程序jailbreak观看flash动画。但不支持在线播放。SwiftSwift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。Swift是苹果公司在WWDC2014上发布的全新开发语言。从演示视频及随后在App Store上线的标准文档看来,语法内容混合了OC,JS,Python,语法简单,使用方便,并可与OC混合使用。作为一项苹果独立发布的支持型开发语言,已经有了数个应用演示及合作开发公司的测试,相信将在未来得到更广泛的应用。某种意义上Swift作为苹果的新商业战略,将吸引更多的开发者入门,从而增强App Store和Mac Store本来就已经有的应用数量基础。
收起全文
精华内容
参与话题
问答
  • IOS 基础入门教程

    千次阅读 2013-12-12 23:50:07
  • 18个 ios 项目源代码

    万次下载 热门讨论 2014-02-27 17:08:31
    18个 ios 项目源代码 各种布局 控件使用 及扩展视图 自定义UITableViewCell。实现各种样式的表格输入界面、自定义Tab Bar的文字、颜色和图片加箭头、列表个性化列表项、IOS欢迎界面等。
  • IOS开发从入门到精通-第一章

    千人学习 2018-04-08 22:16:23
    本课程详细介绍了IOS开发环境搭建及开发工具的使用,讲解了IOS开发常用视图控件的使用 ,还讲解了一个实用的功能实例:APP启动引导页的开发。
  • 本课程主要介绍了开发iOS app的一些基本情况。例如,需要的硬件和软件条件,如何申请开发者账号,XCode的常用功能介绍。后给出一个iOS App的案例来演示开发App的过程。
  • 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版

    展开全文
  • iOS 获取当前正在显示的ViewController

    万次阅读 2014-12-24 10:47:10
    我们在非视图类中想要随时展示一个view时,需要将被展示的view加到当前view的子视图,或用当前view presentViewController,或pushViewContrller,这些操作都需要获取当前正在显示的ViewController。...

    1.我们在非视图类中想要随时展示一个view时,需要将被展示的view加到当前view的子视图,或用当前view presentViewController,或pushViewContrller,这些操作都需要获取当前正在显示的ViewController。

     

     

    //获取当前屏幕显示的viewcontroller
    - (UIViewController *)getCurrentVC
    {
        UIViewController *result = nil;
        
        UIWindow * window = [[UIApplication sharedApplication] keyWindow];
        if (window.windowLevel != UIWindowLevelNormal)
        {
            NSArray *windows = [[UIApplication sharedApplication] windows];
            for(UIWindow * tmpWin in windows)
            {
                if (tmpWin.windowLevel == UIWindowLevelNormal)
                {
                    window = tmpWin;
                    break;
                }
            }
        }
        
        UIView *frontView = [[window subviews] objectAtIndex:0];
        id nextResponder = [frontView nextResponder];
        
        if ([nextResponder isKindOfClass:[UIViewController class]])
            result = nextResponder;
        else
            result = window.rootViewController;
        
        return result;
    }

     

     

    2.获取当前屏幕中present出来的viewcontroller。

     

    - (UIViewController *)getPresentedViewController
    {
        UIViewController *appRootVC = [UIApplication sharedApplication].keyWindow.rootViewController;
        UIViewController *topVC = appRootVC;
        if (topVC.presentedViewController) {
            topVC = topVC.presentedViewController;
        }
        
        return topVC;
    }

    该文章写于多年前,估计现在已经帮不到大家了。

     

     

    展开全文
  • iOS12.4完整越狱来了,附手机端一键越狱教程!

    万次阅读 热门讨论 2019-08-22 16:22:29
    越狱大神Pwn20wnd发布了最新的苹果12.4系统越狱工具,iOS12.4 目前验证打开着,大家都能刷机越狱了! 长话不多说,今天我们直接进入目前最简单的越狱教程,希望大家能喜欢~~ ▍支持手机型号 重点说明一下目前不支持...

    越狱大神Pwn20wnd发布了最新的苹果12.4系统越狱工具,iOS12.4 目前验证打开着,大家都能刷机越狱了!
    长话不多说,今天我们直接进入目前最简单的越狱教程,希望大家能喜欢~~
    ▍支持手机型号
    重点说明一下目前不支持A12的设备,意味着XS、XR、XS MAX都无法进行越狱。仅支持的处理器为A7-A11的设备,具体包括手机机型如下:
    iPhone X

    iPhone 8/8p

    iPhone 7/7p

    iPhone 6/6p

    iPhone 5s/5e
    ▍支持系统版本
    本次越狱仅支持iOS11 - iOS12.2 和 iOS12.4系统,不支持iOS12.3系统如果你是 iOS12.3 想使用越狱请更新到 iOS 12.4。
    ▍越狱操作步骤
    首先保证需要越狱机型对应上面所说的A7 - A11设备,系统版本为12.4。越狱有风险,所以大家请提前做好备份。
    步骤一:
    如下获取安装工具「Unc0ver v3.5.0」链接,手机在线安装ipa文件后显示需要打开设置–通用–描述文件与设备管理里信任「uncOver」即可。
    在这里插入图片描述步骤二:
    打开越狱工具 Unc0ver v3.5.0 后,点击蓝色的「Jailbreak」按钮开始越狱了。等待越狱进度条走完。中途会提示需要重启手机,直接点击「OK」后,等待手机自动重启。
    在这里插入图片描述步骤三:
    重启完后继续点击「Jailbreak」按钮。如下图提示说明越狱成功,点击「OK」就行,最后可以看到「Cydia 」 已经成功安装在桌面。
    在这里插入图片描述
    ▍温馨提示

    1、成功越狱后,Cydia可能会提示无法联网。在爱思助手中下载一个乐网app开启全局代理或者自备梯子即可让Cydia联网。

    2、IOS12.4目前插件尚在适配,但常用插件基本支持,部分插件需要谨慎下载。

    3、手机重启后需要点击Unc0ver重新越狱。

    展开全文
  • iOS Bug 太多,苹果终于坐不住了!

    万次阅读 多人点赞 2019-11-23 09:10:00
    开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢? 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 毋庸置疑,当前移动设备操作系统市场中,Android 和 iOS 作为两大阵营,在相互竞争的同时不断演进。...
  • iOS9程序设计(顶级iOS开发视频课程-Objective-C版) 本课程主要内容包括: iOS9的基础知识 常用控件 屏幕适配 多窗口 导航 表视图 GPS 地图 网络 数据存储、 音频 视频 本地化等内容,并提供了大量的...
  • iOS开发教程之OC语言

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

    万次阅读 2019-10-14 17:06:29
    微信IOS中自动播放声音 是被禁止的。除非用户主动触发。 但是用了微信jsdk后 就可以在 wx.ready()里 控制播放了。 //第一步:首先加载一个微信JS-SDK //第2步:写一些配置 ...
  • 收集整理一波iOS12的捷径库(使用方法见文末),大家使用过程中如果发现有啥问题或者想实现什么捷径,可以关注微信公众号“云峰小罗”,找到我。 1.抖音视频无水印下载 2. 清除照片位置信息 3. 获取热门新闻 4.照片...
  • 使用Objective-C进行iOS移动开发

    千人学习 2019-01-13 12:06:14
    此外、面向对象、结构体、类Class,以及手动内存管理、自动内存管理、协议与抽象类型、错误处理、iOS开发中的常见概念、Xcode操作、多媒体编程、网络编程、数据解析和加密、Sqlite数据库、多线程编程、内购等实用...
  • 本视频教程拥有180节课程,包含iOS开发的方方面面:iOS开发基础理论知识、 视图、视图控制器、多媒体、数据处理、常用插件、信用卡卡号识别、自动化测试、网络访问、多线程、ShareSDK社会化分享、CoreImage、...
  • iOS 捷径大全

    万次阅读 2018-11-15 10:50:50
    iOS 捷径大全 一:实用工具 1:支付助手3.0(新) 2:微博热搜榜 3:新浪微博 4:网购历史价格查询3.0 5:小火箭(新) 6:支付宝红包(新) 7:任天堂红白机小游戏 8:你不会自己百度么 9:上朝网易云 ...
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    千人学习 2017-03-24 13:36:32
    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发
  • iPhone总是弹出一个提示窗口,如下图“iOS 9.3.2可用于您的iPhone且已经可以安装”,而窗口中根本就没有一个不想升级安装的选项。而当我们点击稍后,就会变成如下图所示的界面“输入密码以在今晚更新,如接入电源,...
  • ofstream之ios::ate,ios::app,ios::in,ios::out

    万次阅读 多人点赞 2016-11-23 16:47:35
    ofstream流,以ios::app打开(或者“ios::app|ios::out”),如果没有文件,那么生成空文件;如果有文件,那么在文件尾追加。 以ios::app|ios::in打开,不管有没有文件,都是失败。 以ios::ate打开(或者”ios::ate...
  • iOS高级专题

    千人学习 2019-12-20 09:35:40
    本课程讲述iOS开发中的高级专题,内容包括:音频视频开发、数据库SQLite、CoreData、网络编程、多线程、GPS定位、手势处理、传感器编程、通讯录等。
  • 从零练就iOS高手实战班

    万人学习 2015-06-25 10:37:09
    iOS课程教学从入门到实战,系统讲解Swift编程,精讲基础语法,详解iOS基础框架,知识点涵盖新潮实用的swift,AppleWatch App开发。 咨询QQ:2528047463 咨询群:462917576 付费学员答疑群:446896569
  • iOS h5应用利用URL封装成iOS app,支付宝已经在网页端集成好了,但是封装成app不能跳转到app客户端 支付宝不能跳转到支付宝app![![![图片说明](https://img-ask.csdn.net/upload/201709/11/1505145352_117945.png)...
  • iOS13 已越狱 iOS12.4 已越狱

    万次阅读 2019-06-20 12:13:39
    你没看错,iOS13 beta 内测版系统刚出没多久,那么快被攻破了,在2019年6月11日国外越狱大神 iBSparkes 开发者 在推特分享了二张图片,分别为iOS12.4 和 iOS 13 已经越狱的 Cydia 截图。众所周知一旦设备成功搭载 ...
  • iOS UI实战

    千人学习 2019-12-20 09:20:59
    本课程讲述iOS用户界面的使用,内容包括:UI组件、视图控制器、图像绘制和动画。
  • iOS进阶开发

    千人学习 2017-10-16 21:12:47
    进阶课程涵盖目前iOS开发需要提升和深入研究的基础知识.通过原理讲解,深入理解底层机制.课程答疑讲师QQ:471926977
  • 请问有没有大神做过iOS BLE 4.0 配对方面的开发,小弟遇到些问题虚心求教。 情况如下: 1.硬件方面发送配对请求 iOS 端弹出配对窗口(需要配对码那种),配对码不管输的正确与否 程序都正常往下走(配对码...
  • ios14 6月22号凌晨ios14测试版推出后,上午立马给我的小7装上尝尝鲜。 ios14主要的不同点是: App资源库,可以智能分类 小组件,主屏幕和负一屏 画中画,这个实测仅限apple TV可以使用 接下来的一段时间让我深刻...
  • 服务端是java,使用个推给IOS推送消息,IOS通知栏能收到那种,求参考代码 我是参考个推官网的例子,IOS接收不到 ``` public class Test { //定义常量, appId、appKey、masterSecret 采用本文档 "第二步 获取...
  • ios中iframe的显示问题

    2017-12-21 02:45:19
    问题就是,在移动端,我们开发的时候页面显示是上面是一个topbar,里面是一个返回按钮和菜单栏,下面就是iframe显示加载的页面了,但是在安卓中可以正常显示,但是在ios中,首先会显示topbar,第二部会显示iframe,但是等到...
  • tabBar 顶部黑线如何在 IOS 10 下进行隐藏
  • IOS磁力下载软件,老司机必备品

    万次阅读 2019-08-05 18:20:35
    由于iOS玩机应用的极度匮乏其下载工具类应用更是稀有,先前也为大家推荐过黑科下载器和迅雷安装途径,但是体验上都不完美,很多功能还得付费才能使用,普通用户限速限制次数已经见怪不怪了,稍微敏感点的资源还直接...

空空如也

1 2 3 4 5 ... 20
收藏数 564,177
精华内容 225,670
关键字:

ios