精华内容
下载资源
问答
  • iOS15新特性iOS15适配
    千次阅读
    2021-09-24 13:55:16

    一、iOS15新特性

    1.1、iOS15兼容的设备

    9.21  iOS15.0正式版

    iPhone6S以上,包括SE第一/二代,iPod touch第七代

    具体6s、6sPlus、7、7Plus、8、8plus、X、XR、XsMax、Xs、11、11Pro、11ProMax、12、12Pro、12ProMax、12mini、13、13Pro、13ProMax、13mini

    1.2、iOS15新特性

    专注模式,就是确保用户在一个时间段里屏蔽各种骚扰、非必要的内容不看不听,来提升做其他事情的效率。苹果做了各种细致分类,能进行量身定制。

    NFC增强版 NFC能模拟公交卡、门禁卡等,能把手机强化为卡证管理平台,在中高端安卓手机很普及。苹果的NFC功能限制非常多,要与指定的开发商合作才能启用,故实用性低。

    看图识字 图中文字能提取出来进行复制分享。

    FaceTime 提供人物虚化功能、麦克风选收听人声或全场景声

    二、iOS15适配

    Xcode13编译工程后,问题:

    2.1、NavigationBar

    问题:导航栏问题比较明显,有的变白色,有的变黑色。(我们项目里有navigationBar原本白色现在变成灰色)

    原因:UINavigationBar 部分属性的设置在 iOS15 上是无效的。

    解决办法:查看导航栏API,iOS15的导航栏属性需用UINavigationBarAppearance(iOS13更新的API)来实现。

    swift

            if #available(iOS 13.0, *) {
                let appearance = UINavigationBarAppearance()
                  // 设置导航栏背景色
                appearance.backgroundColor = .white
                  // 去除导航栏阴影(如果不设置clear,导航栏底下会有一条阴影线)
                appearance.shadowColor = UIColor.clear
                  // 字体颜色
                appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
                // 带scroll滑动的页面
                navigationController?.navigationBar.scrollEdgeAppearance = appearance
                // 常规页面
                navigationController?.navigationBar.standardAppearance = appearance 
            }
    

    Objective-C

        if (@available(iOS 13.0, *)) {
            UINavigationBarAppearance * appearance = [[UINavigationBarAppearance alloc] init];
            // 背景色
            appearance.backgroundColor = [UIColor whiteColor];
            // 去除导航栏阴影(如果不设置clear,导航栏底下会有一条阴影线)
            appearance.shadowColor = [UIColor clearColor];
            // 字体颜色
            appearance.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor redColor]};
            // 带scroll滑动的页面
            self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
            // 常规页面
            self.navigationController.navigationBar.standardAppearance = appearance;
        }

    对NavigationBar是白底黑字的app影响不大

    2.2、UITabBar

    背景色失效 (这个问题在我们项目里其中一个tab下存在)

    swift

            if #available(iOS 13.0, *) { 
                let appearance = UITabBarAppearance()
               // 背景色
                appearance.backgroundColor = .white
                tabBar.standardAppearance = appearance
                if #available(iOS 15.0, *) {
                    tabBar.scrollEdgeAppearance = appearance
                }
            } 
    

    Objective-C

        if (@available(iOS 13.0, *)) { 
            UITabBarAppearance * appearance = [[UITabBarAppearance alloc] init];
             // 背景色
            appearance.backgroundColor = [UIColor whiteColor];
            self.tabBar.standardAppearance = appearance; 
            if (@available(iOS 15.0, *)) {
                self.tabBar.scrollEdgeAppearance = appearance;
            }
        }

    2.3 TableView

    问题:a).初始化 UITableView用UITableViewStylePlain样式,发现 sectionHeader 增高了 22px

    (这个问题在我们项目里也是有遇到的)

    原因:iOS 15 的 UITableView 新增了一条新属性:sectionHeaderTopPadding, 默认会给每一个 sectionHeader 增加一个高度

    解决办法:

    swift代码
        if #available(iOS 15.0, *) {
            tableView.sectionHeaderTopPadding = 0
        }
    
    Objective-C代码
        if (@available(iOS 15.0, *)) { 
            tableView.sectionHeaderTopPadding = 0;
        }

    b).初始化 UITableView用UITableViewStylePlain样式,默认不显示灰色,上滑置顶时最上面的sectionHeader才有颜色。

    解决办法:在viewForHeaderInSection代理方法返回自带灰色的section header

    2.3.2、a)设置 tableHeaderView 后,底部会增加一段高度 (需验证)

    解决方案:在设置tableHeaderView时同时设置一个高度为0.01的tableFooterView即可:

    tableView?.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 0.01))

    b)storyboard里的tableView,适配屏幕尺寸改tableHeaderView高度,调layoutIfNeeded不生效,只高度改了,布局没改。

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
    if let headerView = self.tableView?.tableHeaderView, let lastSubView = headerView.subviews.last {
    if #available(iOS 15.0, *) {
    headerView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: lastSubView.frame.origin.y + lastSubView.frame.size.height)
    self.tableView?.tableHeaderView = headerView
     } else {
    self.tableView?.tableHeaderView?.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: lastSubView.frame.origin.y + lastSubView.frame.size.height)
    self.tableView?.tableHeaderView?.layoutIfNeeded()
            }
        }
    }
    

    2.4、UILabel

    2.4.1、 NSBaselineOffsetAttributeName属性的值导致虽然约束没有问题但label内的文字位置不对

    (这个问题在我们项目里有遇到的)

    现在是以控件最上面的线为基准的偏移。所以用到这个属性的可以检查下。

    2.4.2、NSMutableParagraphStyle的lineSpacing属性失效 解决办法加上换行符 \b或\n等

    Xcode12打的包在iOS15显示无效,而Xcode13打的包在iOS15有效

    if (@available(iOS 15,*)) {

                NSAttributedString *placeholderChractor = [[NSAttributedString alloc] initWithString:@"\b"];

                [as insertAttributedString:placeholderChractor atIndex:0];

            }

            [as addAttributes:@{NSParagraphStyleAttributeName: style} range:NSMakeRange(0, as.length)];

    (这个问题在我们项目里有遇到的)

    2.4.3、增加高度解决

    iOS15计算的正好显示完Label文字高度,在IOS15显示不全,增加高度可解决。设置adjustsFontSizeToFitWidth为true时,高度不能与设置的font一样大,增加高度即可。(应该是Beta的问题 目前看正式版已修复)

    2.5、检查用到的第三方库

    如:第三方播放器框架ZFPlayer横屏出现问题,没有正确渲染布局,且无法切回竖屏页面
    有几率闪退。第三方BRPickerView文字选择器内容布局错误。Facebook的跨平台框架React中的fishhook闪退。

    解决办法:修改源码或看作者有没有适配

    修改fishhook.c源码,参考https://github.com/facebook/fishhook/issues/85 中的XuweiQT的方案,将链接中的fishhook.c替换项目中fishhook.c文件

    2.6、H5在WKWebView的显示问题

    部分链接在iOS15的WKWebView、微信、QQ、Safari中出现空白页about:blank

    (应该是Beta的原因,目前正式版没有遇到)

    以上iOS15正式版有的适配问题,除NSMutableParagraphStyle的lineSpacing属性失效问题,和标记为Beta的外,其他用Xcode12编译打的包在IOS15设备使用不出现,而用Xcode13编译会出现问题

    参考以下文章,感谢👍

    【1】https://www.jianshu.com/p/10c7921e6d76

    【2】https://www.jianshu.com/p/79ecec07d8d5

    延伸:关于iOS新特性这里不多说了,可看以下这几篇比较详细。

    iOS15系统如期而至,谈谈iPhone X手机适配性的使用感受 - 哔哩哔哩

    苹果 iOS 15 正式版上线!我们整理了 20+个实用功能教你使用_腾讯新闻

    iOS 15 体验全攻略:实测 iOS 15 后,我们总结了这 20+ 新变化

    更多相关内容
  • 开发者所需要知道的 iOS 10 SDK 新特性(苹果ios开发新特性
  • iOS 14新特性

    千次阅读 2020-06-23 17:08:46
    iOS 14新特性 文章目录iOS 14新特性✨ 1.Widgets(小组件)????2.App Library(App资源库)✨3. Picture in Picture(画中画)????4.Siri????5.Messages、Memoji✨6.App Clip(小程序)✨7.iOS 14 Developer beta 测试版 ...

    iOS 14新特性


    ✨:重点 🌛:了解 🐢:无关紧要

    ✨ 1.Widgets(小组件)

    小组件这个功能其实原来就有的,只不过原来是在负一页面(首页左滑)中显示,在iOS 14中,苹果让它可以在主屏幕中添加了,与你的APP一起呈现。

    原来的小组件是可以自定义高度的,但在新版的iOS14中,苹果针对小组件做了重新设计,定义了一些尺寸供开发者使用,不清楚还能不能自定义。

    新版的小组件还有个智能叠放功能,它可以在不同的时间呈现不同的小组件。
    以下是iOS 13的负一页面
    在这里插入图片描述

    以下iOS 14的负一页面
    在这里插入图片描述

    🌜2.App Library(App资源库)

    这个功能简直就是强迫症患者的福音了,这个功能比现有的App文件夹还要高端上流。我们都知道,随着手机的储存容量越来越大,App也装的越来越多,就导致手机的页面也越来越多,有时候找App需要翻好几页才能找到。App资源库可以把你的App自动整理起来,而且它也可以隐藏你的其它页面,不需要在现实那么多页面。

    隐藏方式是长按App进入摇动模式,点击底部的翻页提示圆点,就出现App页面的缩放视图。
    App资源库则是在你的页面的最后一页(右滑最后一页)。

    ✨3. Picture in Picture(画中画)

    这个功能其实早就有了,但是一直是应用在iPad中,就是再把App放到后台之后,屏幕上出现了一个悬浮窗口播放功能。视频悬浮在应用程序外之后,用户可以很流畅的调节视频窗口大小,特别的是用户还可将它折叠到屏幕侧面以继续在后台播放。

    🌛4.Siri

    原来的Siri使用是全屏交互界面,会覆盖App页面。但在iOS 14做了重新的设计,底部出现新的Siri标志,然后使用Siri打开某个App,会从底部弹出。而查询天气是在顶部已通知栏的形式呈现出来。
    苹果推出来一个新的App,Translate-一款简单易用的翻译软件,可以离线使用,借助机器学习技术和神经网络引擎技术可以翻译文本和语音,支持中文、英语等11中语言

    🐢5.Messages、Memoji

    新增了消息置顶功能,被置顶的发件人来信息是有特殊动画效果。
    memoji新加了表情,有了口罩表情,具体自行查看

    ✨6.App Clip(小程序)

    接下来是,WWDC20新出的特性,App Clip(小程序)功能了,它是App的一小部分, 支持苹果支付和苹果登录功能,WWDC对他的描述是这样的“Light and fast,Easy to discover”
    启动方法可以通过浏览器启动、短信消息MapsNFC、或者二维码打开App Clip。

    苹果自己也推出了小程序码App Clips码,使用相机扫描就可打开,开发者使用Xcode和新的SDK的全部功能开发主App的一部分功能,大小不能超过10M

    小结:
    1.目前已知的是他有自己的`App Clips码`,说明需要上架审核,具体时间不清楚,或者已有的App可能会在Connect上可以申请一个`App Clips码`。
    2.Xcode和最新SDK的全部功能开发,就是可以自定义小程序,功能不单一,开发语言应该是OC或者Swift
    

    ✨7.iOS 14 Developer beta 测试版

    苹果已经发布了iOS 14 Developer beta预览版,用户可以通过下载描述文件来更新最新的iOS14抢先体验一波。
    点击链接到Safari浏览器下载描述文件,然后到设置->通用->软件更新,更新最新iOS14系统

    而开发者也可以到官网下载最新的Xcode12 beta版,先尝试使用吧Xcode 12 Beta发行说明
    注意,Xocde12 beta 只支持macOS 10.15.4
    目前仅发布了测试beta版,正式版官方还没定时间,要等iOS 14正式发布

    链接:https://www.jianshu.com/p/1871fde6de95
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • iOS10开发新特性预览

    2018-03-14 14:36:25
    iOS10开发新特性预览:基于Apple官方文档和网络上针对iOS10版本的分析,对iOS10开发中的一些新特性进行介绍,选择的是一些重要而又有趣的更新进行阐述
  • 文章分享至我的个人技术博客: ...如果没有看的朋友可以去看看:玩转iOS开发:iOS 11 新特性《Xcode 9》 (一)玩转iOS开发:iOS 11 新特性《Xcode 9》 (二)那么这一次呢, 我们来简单的了解一下, 在iOS

    文章分享至我的个人技术博客: https://cainluo.github.io/15099354591154.html


    前两篇, 我们讲了Xcode 9的一些新特性, 可以更加方便我们去写"bug".

    如果没有看的朋友可以去看看:

    那么这一次呢, 我们来简单的了解一下, 在iOS 11里, UIKit更新了一些什么东西, 可以让我们更加快捷的开发.

    转载声明:如需要转载该文章, 请联系作者, 并且注明出处, 以及不能擅自修改本文.


    Paste configuration

    我们都知道, 在iOS有一个东西叫做UIMenuController, 它是一个单例, 可以方便我们简单的去做一些复制, 粘贴等等的操作, 但在iOS 11这个粘贴功能进化了, 让我们一起来看看吧, 首先我们要有一个工程项目:

    1

    简单显示的东西就好.

    然后呢, 我们需要有一个用手势操作UIMenuController的管理者MenuManager, 详细的代码都在工程里, 大家可以去看看.

    iOS 11的时候, 苹果推出了一个东西叫做UIPasteConfiguration, 它是直接继承NSObject官方解释:

    The interface that an object implements to declare its ability to accept specific data types for pasting and for drag and drop activities.

    这个东西能用来干嘛呢?


    配置粘贴功能

    在项目里, 我们默认给TableView加了长按手势和点击手势, 便于用来控制UIMenuController.

    为了方便演示这个配置粘贴的功能, 另外多开了一个控制器, 这里我们需要声明一个全局字符串, 为的就是用来给这个粘贴功能加个唯一的标识:

    @property (nonatomic, copy) NSArray<NSString *> *acceptableTypeIdentifiers;
    

    添加了这个唯一标识, 我们就需要在Cell里给copy:的方法加点修改:

    - (BOOL)canBecomeFirstResponder {
        
        return YES;
    }
    
    - (BOOL)canPerformAction:(SEL)action
                  withSender:(id)sender {
        
        return action == @selector(copy:);
    }
    
    - (void)copy:(id)sender {
        
        if (self.model == nil) {
            return;
        }
        
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.model];
        
        [[UIPasteboard generalPasteboard] setData:data
                                forPasteboardType:CELL_TYPE];
    }
    

    这里面的CELL_TYPE就是全局的唯一标识.

    还有就是要在需要粘贴功能的控制器PasteViewController里也配置一下:

        UIPasteConfiguration *pasteConfiguration = [[UIPasteConfiguration alloc] initWithAcceptableTypeIdentifiers:@[CELL_TYPE]];
            
        self.pasteConfiguration = pasteConfiguration;
    

    并且这里我们还要重写一个方法:

    - (void)pasteItemProviders:(NSArray<NSItemProvider *> *)itemProviders {
        
        for (NSItemProvider *item in itemProviders) {
            
            [item loadObjectOfClass:TableViewCellModel.class
                  completionHandler:^(id<NSItemProviderReading>  _Nullable object, NSError * _Nullable error) {
                     
                     if (object) {
                         
                         TableViewCellModel *model = (TableViewCellModel *)object;
                         
                         dispatch_async(dispatch_get_main_queue(), ^{
                             
                             self.targetTextField.text = [NSString stringWithFormat:@"复制的内容: %@", model.titleString];
                         });
                     }
                 }];
        }
    }
    

    用来处理粘贴后的数据.

    PS: 这里的TableViewCellModel是需要遵守一个NSItemProviderReading协议, 并且在内部实现它的协议方法, 详情可以去代码里看看.


    拖放的基本认识

    iOS 11, 苹果爸爸终于把拖放的功能添加进来了, 但这个功能真正受益的是iPad, 它可以在分屏App里实现数据复制和移动, 甚至还可以共享.

    我们在拖动的过程中, 数据会被序列化, 然后呈现在用户拖动的系统控制预览中, 在拖动完成后, 序列化的数据会被复制到目的地, 然后反序列化, 最终将这些信息呈献给用户.

    而最先获得支持的两个控件就是UITableViewUICollectionView. 现在让我们来新建个工程看看是如何操作.

    这里我们还是一个简单的TableView:

    2

    这里我们要介绍两个新的代理UITableViewDragDelegate, 和UITableViewDropDelegate, 一个分别拖动, 一个分别是放下的代理.

    这里我们要声明一个遵守了NSItemProviderReading, NSItemProviderWritingModel, 内部实现在工程里查看:

    最终我们去实现拖放功能的就是要去实现那两个代理的方法:

    #pragma mark - Table View Drag Delegate
    - (NSArray<UIDragItem *> *)tableView:(UITableView *)tableView
            itemsForBeginningDragSession:(id<UIDragSession>)session
                             atIndexPath:(NSIndexPath *)indexPath {
        
        ListModel *model = self.dataSource[indexPath.row];
        
        NSItemProvider *itemProvider = [[NSItemProvider alloc] initWithObject:model];
        
        UIDragItem *dragItem = [[UIDragItem alloc] initWithItemProvider:itemProvider];
        
        return @[dragItem];
    }
    
    #pragma mark - Table View Drop Delegate
    - (void)tableView:(UITableView *)tableView
    performDropWithCoordinator:(id<UITableViewDropCoordinator>)coordinator {
        
        if (!coordinator) {
            return;
        }
        
        NSIndexPath *destinationIndexPath = coordinator.destinationIndexPath;
        
        dispatch_async(dispatch_get_main_queue(), ^{
            
            [tableView performBatchUpdates:^{
                
                [coordinator.items enumerateObjectsUsingBlock:^(id<UITableViewDropItem>  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                    
                    if (!obj) {
                        return;
                    }
                    
                    NSIndexPath *indexPath = obj.sourceIndexPath;
    
                    ListModel *model = self.dataSource[indexPath.row];
    
                    [self.dataSource removeObject:model];
                    [self.dataSource insertObject:model
                                          atIndex:destinationIndexPath.row];
    
                    [tableView moveRowAtIndexPath:indexPath
                                      toIndexPath:destinationIndexPath];
                }];
                
            } completion:nil];
        });
    }
    
    - (BOOL)tableView:(UITableView *)tableView
    canHandleDropSession:(id<UIDropSession>)session {
        return [session canLoadObjectsOfClass:ListModel.class];
    }
    
    - (UITableViewDropProposal *)tableView:(UITableView *)tableView
                      dropSessionDidUpdate:(id<UIDropSession>)session
                  withDestinationIndexPath:(nullable NSIndexPath *)destinationIndexPath {
        
        return [[UITableViewDropProposal alloc] initWithDropOperation:UIDropOperationMove
                                                               intent:UITableViewDropIntentInsertAtDestinationIndexPath];
    }
    

    代码写完了之后, 别忘了把TableView的拖放功能给打开:

            _tableView.dragInteractionEnabled = YES;
    

    效果图这里就不放了, 自己去跑跑Demo就好了, 个人认为自己写的代码还是挺规整的~~哈哈

    更详细的内容会在后续的文章慢慢讲解.


    TableView侧边栏的改进

    iOS 8的时候, 苹果爸爸就为TableView引进了侧边栏的功能, 叫做UITableViewRowAction, 不过在iOS 11的时候, 苹果爸爸又增加了一个更加灵活的东西, 叫做UISwipeActionsConfiguration:

    我们另外建一个工程来看看, 然后实现我们的配置:

    - (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath {
        
        UIContextualAction *contextualAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal
                                                                                       title:@"Add"
                                                                                     handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
                                                                                         
                                                                                         NSLog(@"Add");
                                                                                     }];
        
        contextualAction.backgroundColor = [UIColor brownColor];
        
        UISwipeActionsConfiguration *swipeActionsCOnfiguration = [UISwipeActionsConfiguration configurationWithActions:@[contextualAction]];
        
        return swipeActionsCOnfiguration;
    }
    
    - (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView
    leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath {
        
        UIContextualAction *contextualAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal
                                                                                       title:@"Copy"
                                                                                     handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
                                                                                         
                                                                                         NSLog(@"Copy");
                                                                                     }];
        
        contextualAction.backgroundColor = [UIColor blackColor];
        
        UISwipeActionsConfiguration *swipeActionsCOnfiguration = [UISwipeActionsConfiguration configurationWithActions:@[contextualAction]];
        
        return swipeActionsCOnfiguration;
    }
    

    3
    4

    关于TableView刷新的时候, 我们还有一个专门的API:

    - (void)performBatchUpdates:(void (NS_NOESCAPE ^ _Nullable)(void))updates completion:(void (^ _Nullable)(BOOL finished))completion API_AVAILABLE(ios(11.0), tvos(11.0));
    

    刚刚的拖放功能也是在这里面完成刷新数据源的, 这么做的话, 可以让我们的逻辑结构更加的清晰, 这样子我们也需要在使用dispatch_async(dispatch_get_main_queue(), ^{});去更新了, 爽爽滴~~


    Asset UIColor的集成

    Xcode 9里, Asset里可以集成UIColor的目录, 这样子我们就可以省略声明一大堆的颜色, 详细怎么做呢? 我们一起来看看, 这里随便弄一个项目就好了.

    然后我们在Assets.xcassets里添加Color Set:

    5

    然后添加自己喜欢的颜色值:

    6

    7

    这里我们要看看两个API, 都是在iOS 11之后才出来的

    + (nullable UIColor *)colorNamed:(NSString *)name
    
    + (nullable UIColor *)colorNamed:(NSString *)name inBundle:(nullable NSBundle *)bundle compatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection
    

    最终效果:

    8


    新添加的辅助功能

    在讲这个得时候, 这里是需要装有iOS 11的真机设备.

    但由于我现在手上没有iOS 11的设备, 所以这里暂时不说, 有兴趣的话, 可以到百度去搜搜, 或者等我iOS 11设备的时候再更新吧.


    总结

    iOS 11更多的东西都是在优化和改进开发的流程, 这篇张文章只是简单的介绍一下而已, 还有更多更深层次的可以自行去查阅苹果的官方文档, 或者是去看看WWDC的视频演示:


    工程地址

    项目地址: https://github.com/CainRun/iOS-11-Characteristic/tree/master/2.UIKit


    作者:CainLuo
    链接:https://juejin.im/post/5a017dd7518825297a0e29ca
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。





     


    展开全文
  • 开发者所需要知道的iOS7SDK新特性.春风又绿加州岸,物是人非又一年。WWDC2013keynote落下帷幕,新的iOS开发旅程也由此开启。在iOS7界面重大变革的背后,开发者们需要知道的又有哪些呢。同去年一样,我会先简单纵览地...
  • 主要介绍了iOS10开发和Xcode 8新特性及常见问题解析的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • 本文是IOS开发之路系列的第三篇,主要是分享了微博新特性页面的制作源码,希望对大家有所帮助
  • IOS11发布以来,很多新的特性为开发工作提供了方便,小编在此给大家介绍一下IOS11的新特性以及在兼容适配等做的工作。 1. UIView变化 1.1. 更加方便的RTL边距设置 在之前的系统中我们会使用layoutMargins来获取和...
  • iOS11新特性

    2017-09-05 11:56:33
    Core ML 所扮演的角色更多的是将已经训练好的模型转换为 iOS 可以理解的形式,并且将的数据“喂给”模型,获取输出。抽象问题和创建模型虽然并不难,但是对模型的改进和训练可以说是值得研究一辈子的事情,这篇...

    新增框架

    新加入 SDK 的大的框架有两个,分别是负责简化和集成机器学习的 Core ML 和用来创建增强现实 (AR) 应用的 ARKit
    Core ML 所扮演的角色更多的是将已经训练好的模型转换为 iOS 可以理解的形式,并且将新的数据“喂给”模型,获取输出。抽象问题和创建模型虽然并不难,但是对模型的改进和训练可以说是值得研究一辈子的事情,这篇文章的读者可能也不太会对此感冒。好在 Apple 提供了一系列的工具用来将各类机器学习模型转换为 Core ML 可以理解的形式。籍此,你就可以轻松地在你的 iOS app 里使用前人训练出的模型。这在以前可能会需要你自己去寻找模型,然后写一些 C++ 的代码来跨平台调用,而且难以利用 iOS 设备的 GPU 性能和 Metal (除非你自己写一些 shader 来进行矩阵运算)。Core ML 将使用模型的门槛降低了很多。
    ARKit 极大降低了普通开发者玩 AR 的门槛,也是 Apple 现阶段用来抗衡 VR 的选项。可以畅想一下更多类似 Pokémon Go 的 AR 游戏 (结合实境的虚拟宠物什么的大概是最容易想到的) 能在 ARKit 和 SceneKit 的帮助下面世,甚至在 iPad Pro 现有技能上做像是 AR 电影这样能全方位展示的多媒体可能也不再是单纯的梦想。

    Xcode 编辑器和编译器

    速度就是生命,而开发者的生命都浪费在了等待编译上。Swift 自问世以来就备受好评,但是缓慢的编译速度,时有时无的语法提示,无法进行重构等工具链上的欠缺成为了最重要的黑点。Xcode 9 中编辑器进行了重写,支持了对 Swift 代码的重构 (虽然还很基础),将 VCS 提到了更重要的位置,并添加了 GitHub 集成,可以进行同局域网的无线部署和调试。
    这里写图片描述

    其他值得注意的变更

    1.拖拽 - 很标准的一套 iOS API,不出意外地,iOS 系统帮助我们处理了绝大部分工作,开发者几乎只需要处理结果。UITextView 和 UITextField 原生支持拖拽,UICollectionView 和 UITableView 的拖拽有一系列专用的 delegate 来表明拖拽的发生和结束。而你也可以对任意 UIView 子类定义拖拽行为。和 mac 上的拖拽不同,iOS 的拖拽充分尊重了多点触控的屏幕,所以可能你需要对一次多个的拖拽行为做些特别处理。
    2.新的 Navigation title 设计 - iOS 11 的大多数系统 app 都采用了新的设计,放大了导航栏的标题字体。如果你想采用这项设计的话也非常简单,设置 navigation bar 的 prefersLargeTitles 即可。
    3.FileProviderFileProviderUI - 提供一套类似 Files app 的界面,让你可以获取用户设备上或者云端的文件。相信会成为以后文档相关类 app 的标配。
    4.不再支持 32 位 app - 虽然在 beta 1 中依然可以运行 32 位 app,但是 Apple 明确指出了将在后续的 iOS 11 beta 中取消支持。所以如果你想让自己的程序运行在 iOS 11 的设备上,进行 64 位的重新编译是必须步骤。
    5.DeviceCheck - 每天要用广告 ID 追踪用户的开发者现在有了更好地选择 (当然前提是用来做正经事儿)。DeviceCheck 允许你通过你的服务器与 Apple 服务器通讯,并为单个设备设置两个 bit 的数据。简单说,你在设备上用 DeviceCheck API 生成一个 token,然后将这个 token 发给自己的服务器,再由自己的服务器与 Apple 的 API 进行通讯,来更新或者查询该设备的值。这两个 bit 的数据用来追踪用户比如是否已经领取奖励这类信息。
    6.PDFKit - 这是一个在 macOS 上已经长期存在的框架,但却在 iOS 上姗姗来迟。你可以使用这个框架显示和操作 pdf 文件。
    7.IdentityLookup - 可以自己开发一个 app extension 来拦截系统 SMS 和 MMS 的信息。系统的信息 app 在接到未知的人的短信时,会询问所有开启的过滤扩展,如果扩展表示该消息应当被拦截,那么这则信息将不会传递给你。扩展有机会访问到事先指定的 server 来进行判断 (所以说你可以光明正大地获取用户短信内容了,不过当然考虑到隐私,这些访问都是匿名加密的,Apple 也禁止这类扩展在 container 里进行写入)。
    8.Core NFC - 在 iPhone 7 和 iPhone 7 Plus 上提供基础的近场通讯读取功能。看起来很 promising,只要你有合适的 NFC 标签,手机就可以进行读取。但是考虑到无法后台常驻,实用性就打了折扣。不过笔者不是很熟这块,也许能有更合适的场景也未可知。
    9.Auto Fill - 从 iCloud Keychain 中获取密码,然后自动填充的功能现在开放给第三方开发者了。UITextInputTraits 的 textContentType 中添加了 username 和 password,对适合的 text view 或者 text field 的 content type 进行配置,并填写 Info.plist 的相关内容,就可以在要求输入用户名密码时获取键盘上方的自动填充,帮助用户快速登录。

    展开全文
  • 主要介绍了浅谈iOS11新特性:新增拖拽交互体验,iOS11新引入了拖拽相关的API可以帮助开发者快速的构建拖拽交互,在iOS11中,使用这种API进行APP的开发为设计提供了一种全新维度的用户交互方式。
  • iOS 5提供的的API,诸如iCloud访问,Newsstand程序的开发,到编译器的进步带来的自动内存管理,让开发者有更大的空间,用更有效的方式来进行iOS程序的开发
  • iOS 11新特性之人脸检测
  • iOS 9应用开发教程之iOS 9新特性
  • Apple公司的iPhone已经开创了移动平台纪元!它与App Store的绝配也为全世界的程 序员提供了一个施展才华的全新大舞台。只要有新奇的创意,你完全有可能像开发iShoot游 戏的Ethan Nicholas(日收入2万多美元)和开发...
  • iOS 15的新特性

    2021-10-20 18:25:18
    关于iOS15版本系统导航栏默认是透明状态,解决办法有: if (@available(iOS 15.0, *)) { UINavigationBarAppearance *barApp = [[UINavigationBarAppearance alloc] init]; barApp.backgroundEffect = ...
  • 简单完成 iOS10 新特性(Widget.Siri.iMessage.Notificaation)的搭建,其中健康图表引用的是大神Wildog 写好的表格。其中 demo 中还含有闪屏、JSPacth 的使用。
  • iOS9 新特性联系人Contact FrameWork 初识contact framework 一什么是contact iOS 9 中苹果介绍了新的 Contacts framework允许用户使用 Objective-C 的 API 和设备的通讯录进行交互同样适用于 Swift 语言比起之前...
  • iOS开发:适配iOS10以及Xcode8 现在在苹果的官网上,我们已经可以下载到Xcode8的GM版本了,加上9.14日凌晨,苹果就要正式推出iOS10系统的推送了,在此之际,iOS10的适配已经迫在眉睫啦,不知道Xcode8 beat版本,童鞋...
  • iOS开发~UI布局

    2021-02-26 06:40:21
    随着iOS8系统的发布,一个全新的页面UI布局概念出现,这个新特性将颠覆包括iOS7及之前版本的UI布局方式,这个新特性就是SizeClass。SizeClass配合AutoLayout可以解决所有(包括iPhone及iPad)iOS设备屏幕尺寸及屏幕...
  • iOS7刚发布的时候,全世界的苹果开发人员都立马尝试着去编译他们的app,接着再花上数月的时间来修复任何出现的故障,甚至重做app。这样的结果,使得人们根本无暇去探究iOS7所带来的东西。一些明显而细微的更新,...
  • 常用的iOS开发库 -- 持续更新中…… 目录 [Apple Watch Demo](#Apple Watch Demo) 内容 Swift教程 iOS教程 - 动画教程写的很赞 - 很赞iPHone适配相关的教程 - 以公司或团体名义在苹果AppStore上架APP - 666的分许了...
  • 用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书。建议大家勾选这个Automatically manage signing(Ps.但是在beat2版本我用的时候,完全不可以,GM版本竟然神奇的又好了。...
  • iOS 11新特性 编写第一个iOS 11应用 4 创建iOS11项目 4 运行iOS11程序 7 iOS11模拟器介绍 iOS11Main.storyboard文件编辑界面 编写第一个iOS11代码Hello,World 15 定制iOS11应用程序图标 20 iOS11数据线连接真机测试 ...
  • 精通IOS开发

    2016-04-05 22:05:21
    作者重写了所有项目代码,使之兼容新旧SDK,还专门新增一章介绍iOS 6的新特性集合视图,并对原有的各章内容进行更新,从而反映出技术的最新发展动态。, 还等什么?立即展卷阅读,加入iOS开发的行列吧!
  • 其设计目的是用于辅助快速构建一个本身基本设计还原效果的iOS项目,同时利用自身提供的丰富控件和兼容处理,让开发者能专注不管是项目的创造,还是已有项目的维护,从而使开发效率和项目质量得到大幅度提升。...
  • Swift是苹果2014年推出的全新的编程语言,它...本文将继续iOS开发系列教程,假设读者已经有了其他语言基础(强烈建议初学者从本系列第一章开始阅读,如果您希望从Swift学起,那么推荐你首先阅读苹果官方电子书《theswif
  • 本书为Swift开发iOS App快速入门与实战的高清完整PDF。Swift集合了C与Objective-C程序语言的优点,但比这两种编译语言在... 书中根据Swift语言特性与与应用定位归纳出简单的学习架构,期望让初学者一次开发就上手。
  • iOS9新特性,泛型

    千次阅读 2016-05-06 11:24:49
    开发中使用场景:  1.限制集合中的类型,只能检测方法的调用,因为声明的泛型只能存在方法中  2.当一个类在声明的时候,某个对象的属性不确定,只有创建对象的时候才能确定,就可以使用泛型。    定义泛型 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,730
精华内容 26,692
关键字:

ios开发新特性