XcodeiOS学习IOS

iOS之Application Extension(Widget

2016-10-24  本文已影响502人  CrazySteven

又是好久没有写东西了,前几天去面试问到关于App Extension的问题,以前没做过,就和大家一起学习下吧,一般常用的是Today和Share,这里就先看看这两个吧.由于关于这方面的介绍网上已经有很多资料了,但没有demo,我自己写了个demo,通过这个demo,相信很快就能将App Extension用到自己的项目中。

Today

先看效果图(系统:iOS 10, demo主要有三个功能,分别是视图的折叠收缩、页面跳转和数据共享):


today_test.gif

下面来说说实现过程

视图的折叠收缩

创建一个Extension我就不说了,UI我是通过storyboard来做的,所以不用做修改,若是用代码布局需要修改Info.plist文件.
需要说明的几行代码:
[self.extensionContext widgetMaximumSizeForDisplayMode:NCWidgetDisplayModeCompact];这行代码是指当today视图折叠起来的最小Size(你所设置的尺寸要比这个大)。
self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;设置成可以折叠的模式

页面跳转

页面跳转就是用通过URL Schemes来打开App,并通过URL传过来的参数跳转到指定的页面,具体做法:

数据共享

数据共享有两种方法,这里只说demo中用到的UserDefault


Share

先看效果图(系统:iOS 10, demo主要有两个功能,分别是分享的字数限制、数据提取和数据共享,这里只做了Safari的分享):


share_test.gif
字数限制(demo限制为66个字)
- (BOOL)isContentValid {
    // Do validation of contentText and/or NSExtensionContext attachments here
    NSInteger maxLength = 66;
    NSInteger length = self.contentText.length;
    self.charactersRemaining = @(maxLength - length);
    if (self.charactersRemaining.integerValue > 0) {
        return YES;
    }else {
        return NO;
    }
}
数据提取
dispatch_sync(dispatch_get_global_queue(0, 0), ^{
        NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.steven.app"];
        [userDefaults setObject:self.contentText forKey:@"shareText"];
        
        NSExtensionItem * item = self.extensionContext.inputItems.firstObject;
        
        NSItemProvider * provider =item.attachments.firstObject;
        [provider loadPreviewImageWithOptions:nil completionHandler:^(id<NSSecureCoding>  _Nullable item, NSError * _Null_unspecified error) {
            NSData * data = UIImagePNGRepresentation((UIImage *)item);
            [userDefaults setObject:data forKey:@"shareImage"];
        }];
        
        NSString * dataType = provider.registeredTypeIdentifiers.firstObject;
        [provider loadItemForTypeIdentifier:dataType options:nil completionHandler:^(id<NSSecureCoding>  _Nullable item, NSError * _Null_unspecified error) {
            NSString * url = [NSString stringWithFormat:@"%@",item];
            [userDefaults setObject:url forKey:@"shareURL"];
        }];
        [userDefaults synchronize];
    });

关于数据共享是和Today是一样的,这里就不再重复了,demo点击下载,欢迎大家Star.

版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

上一篇 下一篇

猜你喜欢

热点阅读