当前位置: 首页 > 科技观察

iOS8出色的跨应用通信效果:Action扩展解读

时间:2023-03-18 17:38:13 科技观察

App扩展首次在WWDC2014正式亮相。出色的跨应用通信效果。例如,您可以使用Today扩展来创建可以在通知中心显示的功能部分,Sharing扩展帮助用户将信息分享到社交网络,Action扩展允许用户执行当前内容——包括以不同方式显示或制作内容的变化。在今天的入门指南中,我们将学习如何从头开始创建Action扩展。虽然本文并没有对大家的知识储备提出太多硬性要求,但还是建议读者朋友们可以先阅读一些相关资料,以便在本文的引导下更容易掌握更多拓展和创造的知识。WWDC会议演讲:为iOS和OSX创建扩展-第1部分和第2部分应用程序扩展编程指南1.我们要创建什么?我们将创建一个名为“Readit”的简单Action扩展。该扩展将文本内容作为输入,并使用AVFoundation框架中的语音合成API大声朗读。我觉得整个过程非常适合作为本教程的核心内容,因为我们在过程中不需要引入任何第三方依赖,也不会有其他难以处理的问题。下面是我们创建后得到的扩展功能效果。您可以单击此处从GitHub下载本教程的结果。2.创建一个Action扩展步骤一:项目设置首先要做的是启动Xcode6.1或更高版本,然后创建一个新项目。从XcodeFile菜单中选择New>Project…,然后从模板列表中选择SingleViewApplication。单击Next并将我们的项目命名为SampleActionExtensionApp。输入组织标识符并将设备类型设置为iPhone。在本教程中,我们将使用的编程语言是Objective-C。第二步:添加目标完成上面的工程创建工作后,就可以为Action扩展添加目标了。从“文件”菜单中选择“新建”>“目标...”。在左侧面板的iOS选项中选择ApplicationExtension,选择ActionExtension后点击Next。现在将产品名称设置为ReadItAction。还需要注意其他一些选项,尤其是ActionType。稍后我们将深入探讨这个话题。现在单击Finish创建Action扩展。现在将询问您是否打算激活这组ReadItAction项。现在单击取消,因为稍后我们将通过运行内容应用程序而不是直接激活它来安装操作扩展。Action类型Action扩展分为两种类型,一种是配备用户界面的,一种是不配备用户界面的。您可能想知道-没有用户界面的Action扩展的真正好处是什么?让我给你解释一下。没有用户界面的动作扩展以改变内容为目标作用于当前项目。例如,Action扩展无需用户界面即可消除照片中的红眼。然后内容应用程序可以使用这个更改后的内容,在这种情况下是更正后的照片素材。带有用户界面的动作扩展可以全屏或格式化形式显示。Action扩展目标模板使用的是全屏形式,所以我们在接下来的创作过程中也会将其作为设计思路。第三步:用户界面的实现现在我们已经完成了基本的设置过程,也就是说我们已经完成了创建用户界面的所有准备工作。让我们从应用程序内容开始。首先单击ProjectNavigator中SampleActionExtensionApp组下的Main.storyboard。在右侧面板中,选择FileInspector并取消选中Usesizeclasses。请注意,如果您要创建一个真正的应用程序并且不需要为iPad提供支持,那么使用sizeclasses(即尺寸类)可能是最好的选择。接下来,打开对象库,将文本视图和工具栏拖到视图中。在右侧的SizeInspectoron中,将文本视图的框架设置为{x:8,y:20,width:304,height:288}。至于工具栏,我们也在SizeInspector中设置,具体参数为{x:0,y:308,width:320,height:44}。工具栏应包含一个栏按钮。选择它,然后在AttributesInspector中将其Style设置为Plain,并将其Identifier设置为Action。作为画龙点睛之笔,我们需要删除文本视图中的默认文本内容,并将其替换为“点击操作按钮以调用活动视图控制器。然后选择‘阅读’操作,此文本将由我们的示例操作扩展读取.(单击操作按钮调用活动视图控制器。然后选择“读取”操作,我们的示例操作扩展将读取此文本。)”视图控制器的UI现在应该如下所示:当然,我们您也可以将内容申请留空。毕竟,我们的目标是构建一组示例应用程序扩展,因此应用程序本身并不真正需要实现功能。但我个人想向您展示从应用程序内部调用活动控制器是多么容易,我相信您也可以使用它来学习如何将更多其他Action扩展合并到您自己的应用程序中。单击工具栏中的按钮时,将显示一组活动视图控制器,我们可以从这里调用我们的Action扩展。选择这种方式的另一个原因是,如果你打算将你的扩展发布到AppStore,那么它必须是真实应用的一部分,而且应用当然必须具备功能才能通过Apple的官方认可。赞同。第4步:ActiveViewController接下来,我们需要向ViewController.m添加一些代码。首先在视图控制器的类扩展中为文本视图创建一套外观,具体代码如下。@interfaceViewController()@property(nonatomic,weak)IBOutletUITextView*textView;@end创建一个名为actionButtonPressed的动作,我们将在其中初始化和显示UIActivityViewController实例并将其提供给用户。-(IBAction)actionButtonPressed:(id)sender{UIActivityViewController*activityVC=[[UIActivityViewControlleralloc]initWithActivityItems:@[self.textView.text]applicationActivities:nil];[selfpresentViewController:activityVCanimated:YEScompletion:nil];}让我们回到Main.storyboard,通过点击Control,将ViewControllerScene下的ViewController对象中的textviewappearancescheme拖拽到textview中,然后在弹出的菜单中选择textView,实现了textviewappearance和textview的对接。为了连接动作方法,我们需要选择工具中的条形按钮并打开连接检查器。将它从Sentactions下的选择器拖到ViewController对象,然后在弹出菜单中选择actionButtonPressed:。至此,应用程序的用户界面设计完成并正式投入使用。接下来,我们就可以继续创建Action扩展了。第5步:用户界面的实现在ProjectNavigator中,展开ReadItAction组并单击MainInterface.storyboard。您应该注意到故事板不是空白的,并且已经包含了一些UI组件。我们可以利用其中的一些,但具体的图像视图帮不上什么忙。因此,按Delete键选择并删除图像视图。接下来打开对象库并在下方导航栏中添加一组文本视图。将其框架更改为{x:8,y:72,width:304,height:300}。最后,双击导航栏的标题视图,将标题内容设置为“文本阅读器”。第六步:ActionViewControlle的实现到此为止,我们需要完成Action扩展的实现。在ProjectNavigator中选择ActionViewController.m并对其进行以下更改。下面的import语句将向AVFoundation框架添加一个import语句,这样我们就可以在我们的Action扩展中使用它的语音合成API。1@importAVFoundation;在ActionViewController类的类扩展中,移除imageView皮肤并添加我们之前添加到文本视图的新皮肤。@interfaceActionViewController()@property(nonatomic,strong)IBOutletUITextView*textView;@end此外,我们还需要对ActionViewController类中的viewDidLoad方法做如下改动。30-(void)viewDidLoad{[superviewDidLoad];//从扩展的背景信息中获取我们要处理的item。//在我们的Actionextension中,我们只需要一个输入项(即文本),所以我们使用数组中的第一项。NSExtensionItem*item=self.extensionContext.inputItems[0];NSItemProvider*itemProvider=item.attachments[0];if([itemProviderhasItemConformingToTypeIdentifier:(NSString*)kUTTypePlainText]){//这是纯文本!__weakUITextView*textView=self.textView;[itemProviderloadItemForTypeIdentifier:(NSString*)kUTTypePlainTextoptions:nilcompletionHandler:^(NSString*item,NSError*error){if(item){[[NSOperationQueuemainQueue]addOperationWithBlock:^{[textViewsetText:item];//设置语音合成并启动它整个实现过程还是非常容易理解的。在viewDidLoad中,我们获取输入文本,将其分配给文本视图,然后创建一个语音合成对象来大声朗读它。第七步:配置Action扩展虽然整个项目创建过程已经接近尾声,但还有一些细节需要重点关注。首先,我们需要将情节提要中的文本视图与我们之前创建的外观进行交互。打开MainInterface.storyboard并将文本视图停靠在图像场景中,就像我们之前在Main.storyboard中所做的那样。接下来,我们还需要为Action扩展指定支持的数据类型。在这种情况下,我们只需要支持纯文本数据。展开支持文件组并选择Info.plist。在Info.plist中,按照NSExtension>NSExtensionAttributes>NSExtensionActivationRule的导航流程,最后将NSExtensionActivationRule的类型从String改为Dictionary。在展开的字典中,单击它旁边的+按钮以添加新的子键。将其名称设置为NSExtensionActivationSupportsText,将其类型设置为Boolean,并将其值设置为YES。这样我们就可以保证我们的Action扩展只有在输入项包含文本内容的时候才会显示。还是在Info.plist中,我们要将BundleDisplayName更改为ReadIt。这看起来会更清楚。下图是Info.plist文件中相关部分的设置结果:Step8最后,可以为Action扩展添加一个图标。在ProjectNavigator中,选择项目并在Targets下选择ReadItAction目标。在“应用程序图标”和“启动图像”部分的“常规”选项卡下,单击“应用程序图标源”旁边的“使用资产目录”。根据提示,我们接下来需要点击Migrate。然后仔细进入asset目录,将以下图标拖到iPhoneAppiOS7,860pt2x位置。完成构建和运行应用程序的步骤,看看是否一切都按预期工作。但还有一点需要注意:如果声音图标在Action扩展中没有正常显示,你需要确保主Images.xcassets文件已经正确复制到扩展目标中。为此,我们需要在ProjectNavigator中选择项目并从Targets列表中选择ReadItAction目标。打开屏幕顶部的BuildPhases选项卡并展开CopyBundleResources步骤。如果Images.xcassets文件没有出现在资源列表中,请单击小加号以手动将其添加到列表中。3.运行和测试最后要做的是运行应用程序并测试其功能如何工作。下面显示的两个屏幕截图显示了扩展的运行情况。您也可以尝试从记事本应用程序调用活动视图控制器,让我们的扩展程序读取它之前记录的文本。另外,我们不妨打开照片应用中的活动列表,这时你会发现你的扩展没有列出来。是的,这完全符合我们之前为它设置的激活规则。总结在今天的教程中,您学习了如何构建一组简单的Action扩展。我们还介绍了一些基础知识,即如何使用AVFoundation框架中的语音合成API。如果你想创建更多的扩展,也可以点这里查看CesarTessarin带来的Todayextension创建指南。如果您对本文内容还有什么问题或建议,欢迎在下方评论区与我们分享。英文原文:http://code.tutsplus.com/tutorials/ios-8-how-to-build-a-simple-action-extension--cms-2279