Tag: swift

创建一个UITabBarController框架

导航(如果不是)是任何应用程序中最重要的方面之一。 选择用户如何在不同的屏幕之间导航对于您的应用程序成功至关重要。 随着AppStore的兴起,人们非常清楚什么是最受欢迎的导航方式。 汉堡菜单,滑动菜单,侧边栏,无论您想称呼它们如何。 这种导航形式成为应用程序的代名词。 我个人发现补充工具栏有很多缺陷。 但是由于我不是UX设计人员,因此您可以在本文中阅读更多有关面向设计的评论。 正如您可能从这篇文章的标题中得出的那样,我最喜欢的应用程序导航形式是UITabBar。 如果我们看一下心爱的Apple的大多数应用程序,则在大多数应用程序中都普遍使用UITabBar。 App Store,手表,时钟和音乐-都使用UITabBar进行导航。 要了解有关使用它的UX好处的更多信息,请查看此文章。 为什么要创建框架? UITabBar已经非常容易在Swift中使用UIKit实现。 那么创建整个框架有什么需要? 标准的UITabBar对我来说有点无聊,我想为组件增加更多个性。 另外,最好创建一些可重用的东西,无需更改太多代码即可对其进行样式设置和动画处理。 在本文中,我不会介绍创建CocoaTouch框架所需的步骤。 要开始创建可重用的框架,请阅读Alec O’Connor的这篇很棒的文章,我将其用作参考。 既然我们已经讨论了为什么要建立一个框架并列出我们想要实现的目标,那么让我们开始CODE😎! 我们希望我们的框架遵守一些原则和概念。 原理与概念 固体 面向协议 先决条件 作为先驱,我建议您熟悉以下原则: 访问修饰符 数据源和委托 程序限制 这些是设计和开发框架架构时应牢记的核心原则。 当我们在代码中遇到它时,我将进一步扩展每个概念。 至此,您已经为框架项目创建了一个很酷的名称,例如MDVTabBarController。 首先,一些小组结构👷‍♀️。 TabBarController基本上是三种类型的组件的组合。 它们是:代表每个选项卡的TabBarItems,容纳项的TabBar,最后是一个顾名思义的TabBarController,它控制上述组件。 我们将从最小的组件开始,然后从那里构建我们的框架。 最后,我们希望有一个框架来利用插件动画。 MDVTabBarItem 创建一个名为MDVTabBarItemable的文件,将其放置在“ 协议”组中,然后创建一个名为MDVTabBarItem的文件,并将其放置在MDVTabBar组中。 MDVTabBarItemable是我们希望所有TabBarItem都遵守的协议。 我们将用UIView替换标准的UITabBar和UITabBarItem,因为我相信它将提供更大的灵活性。 该协议定义了两个方法configure ,用于设置TabBarItem和setState。 最后一个将TabBarItem设置为选中或未选中。 类型别名 MDVTabBarContainer定义了动画师要使用的接口。 MDVTabBarItem接收带有图像的UITabBar项,并创建一个以图像为中心的UIView。 目前,MDVTabBarItem将不处理标题标签,但是可以通过创建UILabel并将其放置在UIView中来轻松添加。 您会注意到尚未执行所需的初始化 。 这是情节提要用于初始化组件的初始化程序。 我们将不会使用情节提要,因此无需实施。 MDVTabBar […]

使用ARKit进行图像跟踪

在其他众多功能中,ARKit 2.0引入了图像跟踪功能。 当您拥有动态图像锚点时,它非常适合用例,并且可以在用户体验依赖于运动(例如增强型游戏)或艺术和时尚等应用中使用。 在这篇小文章中,我将从开发人员的角度概述ARKit中的图像跟踪,并提供一些示例代码。 要启用图像跟踪,您需要将ARSesion配置设置为ARImageTrackingConfiguration 。 ARImageTrackingConfiguration是为独立图像跟踪创建的新型会话配置。 如果您在AR应用程序中仅使用图像检测功能,则更可取。 在下面的示例中,我将cat gif放置在跟踪图像的顶部。 如您所见,图像位置更新非常流畅。 还需要向会话配置中添加一组ARReferenceImage并运行它。 Creating ARImageTrackingConfiguration ARWorldConfiguration仍然不会太频繁地更新图像位置,这意味着您不能将图像跟踪与其他ARKit功能(如平面检测)一起使用。 通过使用线性插值和ARWorldConfiguration位置更新来重新创建图像运动的坐标,可以伪造图像跟踪。 实际上,我对此主题有大量帖子,请查看。 ARKit 2.0还支持多图像跟踪。 目前,您最多可以跟踪2张图片,但是在以后的版本中,数量肯定会增加。 configuration.maximumNumberOfTrackedImages = 2 这是对ARKit 2.0图像跟踪可能性的快速回顾。 现在,它真的很容易实现,并且就像一个魅力。 🖖

Swift for iOS中的单元测试-完整指南

了解如何实施单元测试。 在我以前的文章中,我们讨论了什么是单元测试以及为什么要在iOS开发中包括它。 在本文中,我将使用一个非常基本的示例介绍如何在Swift中编写测试类和方法。 创建一个项目: 如果创建一个新项目: 开启Xcode 创建一个“单视图应用程序”,并根据需要命名。 就我而言,它将被命名为UnitTestExample。 点击“包含单元测试” 打开一个现有项目 如果打开没有添加单元测试的现有项目: 转到“项目设置” 确保选择了主要目标 单击底部的“ +”按钮。 选择“ iOS单元测试包”,然后单击“下一步”。 现在,您应该已经添加了测试类文件。 您还将在目标列表中看到测试目标。 让我们打开ViewController文件并编写一个简单的扩展名。 扩展Int { func Cube()-> Int { 返回自我*自我*自我 } } 此扩展名返回一个整数的立方。 现在,让您在测试类文件中使用XCTest测试此扩展。 使用前面的步骤添加测试类文件时,它会自动生成一些方法,包括“ setUp”,“ tearDown”,“ testCaseExample”和“ PerformanceExample”。 我们将在本文的稍后部分介绍每种方法。 现在,我建议您删除XCTest类中的所有内容。 现在,将其替换为以下代码。 导入XCTest @testable导入UnitTestExample class UnitTestExampleTests:XCTestCase { func testCube(){ 令val = 4 让res = val.Cube() XCTAssertEqual(res,64) } } […]

Swift 4中的iOS UIKit:使用UIWebView打开PDF

预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIWebView https://developer.apple.com/reference/uikit/uiwebview UIButton https://developer.apple.com/reference/uikit/uibutton UIActivityIndi​​catorView https://developer.apple.com/reference/uikit/uiactivityindicatorview 网址 https://developer.apple.com/reference/foundation/nsurl NSURLRequest https://developer.apple.com/reference/foundation/nsurlrequest 快乐编码😄

我应该使用struct还是class?

如果您不熟悉Swift,那么您可能会认为Struct和Class可以做完全相同的事情,而struct的灵活性也较低,因此为什么不使用Class而不是Class呢? 结构是值类型, 类是引用类型。 引用类型位于堆内存中,值类型位于堆栈存储器中。 因此有时struct可能比类更快,但实际上它取决于许多其他事情。 包含值类型的变量包含整个值类型值。 当您将值类型复制到另一个变量时,这意味着您正在复制整个值。 复制后,它们是两个不同的变量,如果您对一个变量进行了一些更改,则不会对另一个变量产生影响。 包含引用类型的变量包含一个指针,该指针保存实际变量所在的内存地址。 将引用类型复制到另一个变量意味着它将地址从一个变量复制到另一个。 这两个变量现在拥有相同的内存地址。 如果对其中一个进行一些更改,则对另一个也会有相同的效果。 如果我们通过Struct和Class,那么我们可以得出如下摘要: 课程– 可以支持继承。 正在配套铸件。 可以有反初始化器。 支持引用计数。 结构- 不支持继承。 不支持类型转换。 通过价值传递。 不能有空引用。 因此,结构基本上适合用作数据容器,而不是逻辑部分。 如果您的数据类型相对较小且寿命较短,则可以考虑使用结构。

Bash脚本在HTML中的快照(iOSSnapshotTestCase + Bash + HTML / CSS)

辛北尔(Siempre)和布宜诺斯艾利斯(Bueno automatizar)。 是的,您可以在任何时候都可以轻松地找到自己的名字。 请在iOS原始版本的HTML中添加HTML格式的快照。 从iOS快照测试案例中获取消息。 Tener un proyecto iOS和iOSSnapshotTestCase集成在一起。 Escribíunartículosobre como usarlo,信息通报。 Tener conocimientosmínimosde Bash脚本编写 Descargando el proyecto de ejemplo 可以通过整体快照来复制和保存快照。 Para ello hacemos: git clone https://github.com/fedejordan/SnapshotsHTMLExample Podemos ver que los pods ya estan descargados(des subi al proyecto para descargarlosmásrápido)和ademoástenemos algunos快照generados para los siguientes设备:iPhone SE,iPhone 8,iPhone 8 Plus,iPhone XR和iPhone XS和iPhone XS Max。 Algo para recordar,para […]

在本地使用CocoaPods Lib

您已经创建了一个Lib,并希望通过CocoaPods将其安装在其他项目中,但仍想在本地使用Lib和其他项目。 为此,您将需要创建Podspec文件。 该文件将包含有关您的Lib的所有信息( 版本 , 名称 , 描述 , 依赖项 , 作者等)。 如果Podspec文件和所有必填字段已填写,则只能使用CocoaPods将此Lib放置在其他项目中。 有一个命令可以创建您的自动Podsepc,并报告所有字段都要填写。 在告诉您哪个命令之前,有非常重要的细节。 Podsepc的名称应与项目相同,如果不相同,则在尝试由其他库上的pod install安装时,将找不到它。 要创建Podspec,您应该位于Project文件夹( 您的lib )内 cd ~/Workspaces/SomeLib // Will create the file SomeLib.podspec pod spec create SomeLib // or // Will create the file SomeLib.podspec and will fill // automatically some inputs. pod spec create https://github.com/SomeLib.git 注意:如果您使用git网址。 您应该注意那里的项目名称。 例如。: 如果您使用的是https://github/some-lib.git并且Lib的名称为SomeLib,则pod […]

Viper实施中的IOS内存管理(ARC)

关于ARC的文章更多,其中有很多很好的例子。 我将保持简单。 该图中显示的示例演示了ARC的工作原理。 持有参考 简单来说,您创建的每个对象都有一个引用。 如果存在您可以访问并指向一个对象的变量或常量,则基本上意味着该变量将保留该引用。 参考类型 有3种参考类型: –强 –弱 –无人 请记住,ARC仅跟踪强引用。 那么ARC到底要跟踪什么? 好吧,我很高兴你问。 如上图所示,当其他变量持有对Car()的引用时,ARC会继续增加引用计数,而当变量设置为nil时,ARC会递减引用计数。 同样,当该引用计数为0时,ARC会为您删除分配的对象。 太好了,实际上,这是一个很棒的解决方案,我决定提供几行以纪念这个惊人的创作。 毒蛇 不,不是这个…… 如果您熟悉其他架构,例如MVC , MVP , MVVM,这将更容易理解。 体系结构的主要思想是将代码逻辑分离到不同的模块中,以便使其他开发人员更容易理解代码,并使代码更具可测试性。 选择使用哪种方法实际上取决于项目规模和团队协议。 涉及大型项目时, MV-X系列的体系结构存在一个常见问题。 而这个问题是大规模的视频监控器,演示者或视图模型。 这基本上意味着一个模块中的代码太多,以后可能会造成混乱。 这就是VIPER出现的原因之一。 VIPER通过进一步拆分代码来解决MV-X问题。 在5个主要模块中:视图,交互器,演示者,实体,路由器。

新的Fastlane插件可使用altool上传iOS二进制文件

最初在XCBlog上发布 。 阅读原始文章以获得更好的图形 苹果不希望我们出于任何原因启用连续部署。 没有用于处理iTunes Connects的API,Apple仍然希望批准您的应用程序。 苹果自己的持续集成服务器(又称Xcode服务器)不允许我们将IPA文件上传到iTunes Connect。 存档过程会创建一个ipa文件,但会在那里停止。 我们仍然需要依靠Fastlane或手动过程将内部版本上传到iTunes connect。 在上一篇博客文章中,我们已经看到了将iOS二进制文件上传到iTunes Connect的五种方法。 在本文中,我们将介绍我编写的Fastlane插件altool,以使用altool将iOS二进制文件上传到iTunes Connect。 您可以在Github上找到该插件的详细信息。 为什么我写了这个插件 Fastlane解决了使用传递和试用之类的工具将iOS二进制文件上传到iTunes Connect的问题,以便我们可以编写与iTunes Connect交互的脚本。 但是,Fastlane使用iTMSTrasporter工具上传二进制文件并处理iTunes Connect,这是一个棘手且漫长的过程。 GitHub上有一个问题来讨论在iTMSTransporter上使用altool的问题,但是作者决定使用iTMSTrasporter来交付工具。 altool是Application Loader的命令行界面,似乎比iTMSTrasporter更为流畅。 我们不需要显式安装此实用程序,它附带了最新的Xcode。 苹果在这里有altool的简要文档。 使用Fastlane,无需使用此工具,因此我认为编写插件很容易,这样我们就可以将二进制文件上传到iTunes connect。 如何使用altool插件 使用altool插件与使用其他插件一样容易。 首先,通过运行以下命令将其添加到您的项目中: fastlane add_plugin altool 此插件的唯一先决条件是必须安装Fastlane,此插件具有可配置的Apple ID和密码,但您可能不想在配置中编写该值。 您需要使用FASTLANE_USER和FASTLANE_PASSWORD环境变量设置进行Fastlane设置。 当您运行fastlane init时,Fastlane会询问它,但如果没有,则必须设置这些变量。 您可以轻松地为bash shell设置它 $ export FASTLANE_USER =“ your_apple_id@yourcompany.com”; $ export FASTLANE_PASSWORD =“ your_super_xecret_password”; 如果您不使用bash,也可以对外壳进行选择。此插件可用于使用Gym将生成的ipa文件上传到iTunes Connect。 安装后,我们可以使用以下配置参数轻松配置插件 […]

Xcode中的配置处理

通常,Xcode从两种配置开始。 调试和发布。 您将在项目的信息页面中找到它们。 您可以根据需要创建更多配置,例如Beta,Staging等。 您可以根据需要编辑这些配置(只需创建发行版或调试版的副本并适当地重命名)。 然后,您可以添加swift编译器标志,以便我们可以通过代码检查当前配置。 为此,转到项目(非目标) → 构建设置 → Swift编译器 → 自定义标志 s→ 其他快捷标志部分,然后编辑不同的配置标志。 使用语法“ -D ”添加标志。 注意:如果没有看到“ 其他swift标志”部分,则将进入基本的构建设置模式。 只需在下面的屏幕截图中选择“ 全部 ”即可。 现在,我们可以在代码中使用这些标志来检查当前配置,例如: 现在,要更改当前方案,请转到目标 → 编辑方案。 然后在“信息”选项卡下,单击并根据需要更改生成配置 。 假设如果发布和调试应用程序的常量不同,请遵循上述配置管理模式,这有助于最大程度地减少错误。 请享用!! 如果您喜欢阅读这篇文章,请分享并推荐它,以便其他人可以找到💚💚💚💚💚💚!!!!