Tag: 3d Touch

在您的应用中采用3D Touch快捷方式项。

随着iPhone 6s的问世,Apple引入了3D Touch机制,这是非常酷的事情。 最新的iPhone 7上也可以使用3D Touch。没有任何迹象表明未来的Apple设备将使用该功能,因此,这里有一个快速教程,介绍如何使用3D Touch的三个主要功能之一来改善您的应用程序。 修改您的Info.plist文件 在您的Info.plist文件中添加一个名为UIApplicationShortcutItems的特殊键。 它应该是一个数组。 将项目添加到UIApplicationShortcutItems数组。 项目应为字典类型。 放置每个项目的信息。 在此设置的值很少。 UIApplicationShortcutItemType(必需) UIApplicationShortcutItemTitle(必需) UIApplicationShortcutItemSubtitle UIApplicationShortcutItemIconType UIApplicationShortcutItemIconFile UIApplicationShortcutItemUserInfo 我将重点介绍在示例应用程序中设置的值。 UIApplicationShortcutItemType是一个字符串,用于向您的应用程序提供有关按下了哪种快捷方式的信息。 UIApplicationShortcutItemTitle是显示快捷方式时用户看到的内容。 UIApplicationShortcutItemIconType是一个字符串,用于通知应用程序此快捷方式应使用哪种系统图标。 最后一个是UIApplicationShortcutItemIconFile定义出现快捷方式时应显示的图标名称(而不是系统图标)。 重要的是,您可以使用系统或自定义图标。 Apple建议自定义图标应为方形,单色和35×35磅。 您可以从Apple文档中获取有关UIApplicationShortcutItems键和描述的更多信息。 配置的Info.plist可能如下所示: 并通过代码: 应用程序快捷点击处理 好的,现在移至AppDelegate类,让我们处理应用程序的快捷点击事件。 1.重写并实现UIApplicationDelegate方法。 让我们专注于这种方法: 如您在上面看到的,我创建了两个带有自定义图标,标题和副标题的快速操作。 动态快捷方式项 值得一提的是动态快捷项。 是的,UIApplicationShortcutItems分为static和dynamic 。 静态-将项目放置在info.plist 动态的-可以在代码中添加和删除项目 要添加动态快捷方式项,您只需将其添加到shortcutItems数组中。 关于我 我是波兰格但斯克的软件开发人员。 大多数情况下都使用iOS,但我对其他任何技术,框架和挑战都持开放态度。 如果您喜欢我的帖子,请随时在Twitter上关注我并阅读我的个人博客。

Gesturizer:在3D-Touch设备上为iOS应用启用手势交互

取决于上下文和任务,由手写笔或手指在移动设备上进行的手势比与按钮和菜单进行标准交互更有效和方便。 然而,手势和相关命令的记忆引起一些困难。 另外,由于有限的屏幕空间和屏幕上已经存在的可单击/可移动UI元素,将手势交互应用于应用程序的操作受到限制。 为了解决这些问题,让我介绍一下iOSGesturizer库。 简而言之,该库允许在3D触摸设备上运行的任何iOS应用上基于单笔划手势的交互,而不会干扰现有的UI元素。 有关更多详细信息,让我们仔细看一下该示例。 这是他们的教程中使用的简单的Apple的FoodTracker项目。 通过CocoaPods将iOSGesturizer导入此项目后,从该项目中打开两个文件。 在AppDelegate.swift文件中,初始化窗口:UIWindow变量作为GesturizerWindow类的实例: var window:UIWindow? = GesturizerWindow() 现在打开文件MealTableViewController.swift并添加以下内容: 覆盖func viewDidAppear(_动画:布尔){ super.viewDidAppear(动画) 让window = UIApplication.shared.keyWindow! 如! 手势窗口 让view = GesturizerView() view.gestureHandler = { 让警报= UIAlertView() alert.message = view.names [索引] alert.addButton(withTitle:“确定”) alert.show() } window.setGestureView(视图:视图) } 通过gestureHandler,我们定义了手势侦听器方法。 在这种情况下,手势名称(剪切,复制或粘贴)会在警报消息中弹出。 现在,运行项目: 如您所见,该应用程序可识别三种类型的手势。 要显示可能的手势(例如左侧),您需要用力触摸并等待一秒钟,然后用手指进行所需的动作。 学习后,您无需等待即可执行手势(右侧示例)。 从体系结构的角度来看,这整个过程看起来像这样: GesturizerWindow首先处理所有屏幕触摸,并确定是否将事件传递给GesturizerView或下面的视图。 值得一提的是,只有GesturizerView才需要在“训练模式”下显示手势,而在GesturizerWindow中则需要进行按压力和手势识别的处理。 对我们来说幸运的是,GesturizerWindow不会在应用程序中造成延迟,因为手势是使用快速简单的算法1 $ -Recognizer识别的,不需要训练数据也无需学习。 如果您认为这个想法很有趣,那么我正在等待请求。 PS我计划添加一般自定义手势和参数的功能。

在iOS中实现3D Touch

当用户选择快速操作时,您的应用程序将启动(如果当前未运行),否则,如果您的应用程序已启动并且处于后台/暂停状态,则您的应用程序将在应用程序委托对象收到快速操作之前被激活消息或通知。 对于任何应用程序,我们最多可以有4个快捷方式操作;如果从应用程序商店下载了第五个名为shareApp的快捷方式,则系统会添加该操作。 我们的应用程序中可以同时包含静态和动态快速操作,但是静态操作比动态操作具有更高的优先级。 因此,如果您的应用具有3个静态操作和3个动态快速操作快捷键,则只会向用户展示一个动态操作以及这3个静态操作。 →开始编码: 要添加快速操作,请在应用程序的Info.plist文件中创建UIApplicationShortcutItems的数组。 该数组的每个元素都是一个字典,其中包含一个快速动作的属性( 例如动作的标题,字幕,图标,动作的类型(快捷方式的唯一标识符) ) 。 按键说明: UIApplicationShortcutItemType:必需的字符串,用于标识您的快速操作。 字符串必须是唯一的且特定于应用程序。 一个好主意是在它的前面加上您的包ID或其他一些应用程序唯一的String。 如果您想使用应用程序包标识符,请使用类似这样的占位符,该占位符为您提供包标识符的路径。 “ $(PRODUCT_BUNDLE_IDENTIFIER)”。 因此,即使将来更改了捆绑包ID,您的应用程序快捷方式也不会生效,也不需要在其他类似位置手动更改捆绑包ID。 UIApplicationShortcutItemTitle:必需的字符串,一旦用户按下应用程序的图标,该字符串就会显示快速操作的标题。 如果您的应用程序已本地化,则可以设置Localized.string文件的String键。 向用户显示了快速操作。 UIApplicationShortcutItemSubtitle:一个可选的字符串,用于显示快速操作的字幕。 字幕也可以本地化为标题。 UIApplicationShortcutItemIconType:可选的字符串,显示由库提供的系统图标。 检查UIApplicationShortcutIcon枚举以查看所有可能的字符串键。 UIApplicationShortcutItemIconFile:可选的字符串,用于显示要从应用程序包中使用的自定义图标图像,或资产目录中图像的名称。 UIApplicationShortcutItemUserInfo:一个词典,其中包含一些您想通过快速操作传递的额外信息。 快速操作会在iOS主屏幕上显示给用户,因此在选择这些选项时,我们需要在我们的应用中进行处理。 处理它们的最佳位置是您的App-elegate类。 在此应用程序中,我为UIApplicationShortcutItemType使用了一个枚举,以避免键入错误。 每当用户在主屏幕上选择快速操作时,在应用程序的App-delegate类中,都会调用application:shortcutItem:completionHandler:方法。 此方法必须使用布尔值调用完成处理程序,这取决于快速操作的成功或失败。 在application:didFinishLaunchingWithOptions:方法中,我们将该值保存到launchShortcutItem中,以便接下来可以处理它。 下一个要调用的方法是applicationDidBecomeActive ,此方法在application:didFinishLaunchingWithOptions:之后启动:在您的应用程序首次启动期间,或者每次用户进入您的应用程序时,该应用程序仍在后台打开。 当用户选择一项快速操作时,该应用将启动或继续。 因此,将在调用performActionForShortcutItem方法之前,调用上述两个方法( application:didFinishLaunchingWithOptions:或applicationDidBecomeActive )中的任何一个。 正如我们上面所讨论的,这是通过使用true或false调用完成操作(Bool)来处理快捷方式操作的必需方法。 在下图中,我为快速操作的快捷方式标识符定义了一个枚举。 我使用此枚举类型来查找用户在handleShortcutItem方法中触发了哪些操作。 在下图中,我们定义了handelShortcutItem方法。 首先,我们检查触发的快捷方式操作的类型是否为nil。 然后得到触发类型。 使用开关盒后,将执行所需的功能。 →动态快捷方式动作:到目前为止,我们已经看到了在应用程序的info.plist文件和然后在AppDelegate类中配置的静态动作。 我们也可以实现动态动作,但是请记住仅显示了4个动作,静态动作的优先级较高。 让我们看看配置动态动作。 在上图中,我通过代码配置了动态操作。 首先,我设置了类型,记住它必须是唯一的并且是必需的,就像在我以应用程序的包标识符作为前缀分配类型之前一样。 然后,我通过API初始化了快捷方式项。 在这一章中,您可以根据需要动态地提供标题和副标题(以及图标)。 最后,我将创建的项目分配给UIApplication的shortcutItems数组。 您可以在需要的地方调用上面的代码段,该代码段已包装在函数中。 […]

非常简单的iOS快速操作

我一直在搜寻有关如何向iOS应用程序添加简单快速操作的简单教程。 这不会是动态的。 没有自定义图片。 这是可行的iOS快速操作的最简单的版本。 菜单中的东西 您需要做的第一件事是在您进行3D触摸时使某些内容显示在菜单中(我不确定该怎么称呼该动作)。 为此,您需要在应用程序的info.plist文件中添加一个条目。 使它看起来像这样: 基本上,您需要告诉应用标题。 然后,当有人执行此操作时,您想发送什么消息到您的应用程序。 对我来说,我将数字5作为字符串发送,我尝试使用数字,但是菜单项停止显示。 因此,我现在正在使用字符串。 这是当您“强制按下”时的样子吗? 在应用程序图标上。 不漂亮。 但这有效。 下一步是在有人按下该按钮时执行某项操作。 做某事 现在我们有了一个按钮,在点击它时我们应该做一些事情。 幸运的是,我们所需要做的就是实现一种方法: 在该方法内部,您将获得UIApplicationShortcutItem ,该对象将告诉您执行了哪个操作。 就我而言,该项目将是字符串“ 5”。 这意味着启动5分钟计时器。 而已。 谢谢阅读。 如果您想要一个Big Timer,那么它是开源的,并且可以在App Store上找到:https://github.com/joelklabo/BigTimer

3D Touch Peek&Pop入门-Swift

今天,我们正在检查最好的3D Touch功能。 你们中有些人可能在想,这与长按有什么不同,对吗? 好吧,目前它的用途可能并没有很大的不同,但是使之成为可能的技术却是完全不同的。 3D Touch将感应您的手指对屏幕施加的压力并触发各种动作。 因此,代替短按或长按,3D Touch可以实现软按和硬按。 通过本教程,您将知道如何在主屏幕快速操作以及“窥视和弹出图像”中实现3D触摸。 在您的应用上实施3D touch之前,您应该检查设备是否支持3D touch。 检查3D Touch支持: if(traitCollection.forceTouchCapability == .available { registerForPreviewing(with:self,sourceView:view) } 1.主屏幕快速操作 快速动作只不过是当您强行触摸应用程序图标时,将显示一个菜单。 您可以使用它来快速访问应用程序的特定部分或触发操作。 快速动作分为静态和动态。 每个应用最多可以执行四个快速操作。 您可以定义更多快速动作,但是最多可以显示四个。 此外,静态快速动作将被优先考虑。 因此,如果您定义了三个静态快速动作和两个动态快速动作,则将显示所有三个静态快速动作,但仅显示一个动态快速动作。 您可能已经注意到,应用程序提供了第五个快速操作,称为“共享”。 该操作由操作系统自动提供。 静态快速​​动作 静态快速​​动作在编译时生成,并且始终保持不变。 在安装应用程序之后,甚至在首次启动之前,它们都将立即可用。 动态快速行动 动态快速行动在运行时生成,并通过使用代码反映某种用户行为。 对于每个项目,您都必须创建UIApplicationShortcutItem的实例。 然后,您可以设置所有项目。 让我们从创建新项目开始。 之后,您必须在应用程序的Info.plist定义UIApplicationShortcutItems数组。 源代码: UIApplicationShortcutItems UIApplicationShortcutItemIconType UIApplicationShortcutIconAdd UIApplicationShortcutItemTitle 显示图片 UIApplicationShortcutItemType addBundleIdentifier .showPictures 在AppDelegate中,添加performActionForshortcutItem函数,并在其中插入以下代码 如果shortcutItem.type ==“ UIApplicationShortcutItemType” { let storyBoard:UIStoryboard […]

如何将iOS 3D Touch作为UIGestureRecognizer应用于任何UIView

我知道,有传言称苹果将在2019年的新设备中删除3D Touch,但是我仍然爱上此功能,因为它是在iPhone 6s中首次实现的。 作为开发人员,我只在UITableView单元格,带有peek和pop的UICollectionView单元格以及iOS SpringBoard中的Quick Actions中实现了它,但是最近我需要有一个UIGestureRecognizer才能应用于可以拦截水龙头的任何拦截3D Touch的UIView ,拖动,ecc,但系统库中没有类似的功能。 作为对该实现的研究的结果,我编写了一个可以满足我的需求的UIGestureRecognizer子类。 第一步是在swift文件中导入正确的库,并创建空的UIGestureRecognizer子类,该子类将覆盖实现所需的四个方法: