Tag: iOS应用开发

变得模糊:快速的iOS技巧,用于模糊的表格视图单元

我刚刚在应用程序商店中发布了天气应用程序Celsius和Fahrenheit,这非常令人兴奋,并且会获得其博客文章,但是在此之前,我想谈一谈我很高兴在构建时使用的一项很酷的功能我的应用 UIBlurEffect 我已经说明了一个看起来很酷的空间背景场景,就像任何有理性的人使用一个很酷的背景构建一个表格视图一样,都不希望所有令人敬畏的事物完全消失在纯色表格视图单元格后面。 我尝试调整Alpha,但它缺少我想要的某些辐射效果。 在今天的扩展或聚光灯下搜索之前,我曾看到过很大的模糊,但还不知道如何将它们变成我自己的并将其放入表格竞争单元格。 走进了UIVisualEffect和UIBlurEffect。 这是我构建的演示项目的屏幕截图,演示了一些模糊效果。 我使用了色彩鲜艳的背景和一艘太空飞船来帮助更好地看到效果。 使用默认的表视图单元格,结果就是这样。 您可以看到为什么它需要一些帮助。 出于我自己的娱乐考虑,我选择在表视图中填充宇航员的姓名和他们所飞入的航天器的名称。我将行分开,每行各有一个部分,以便在连续两次之间调整空白细胞。 现在,如果我将带有模糊效果的UIVisualEffectView放到情节提要中的原型单元内容视图中,就会看到此情况。 将UIVisualEffectView添加到情节提要中的表格视图只会在单元格上方或下方添加模糊效果。 我决定以编程方式在tableView:cellForRowAtIndexPath:方法中添加视觉效果视图和模糊效果,并认为看完结果后可以继续使用。 但不要上当!!! 当表格视图滚动出并再次进入视图时,每次调用tableView:cellForRowAtIndexPath:都会添加一个新的视觉效果视图。 与Gherman Titov和他的飞船Orel(Eagle)一起检查底部单元。 它越来越亮!!! 我们使用Xcode中的Debug View Hierarchy按钮来确认这一点,并且可以看到所有添加的视觉效果视图堆叠在底部单元上方。 在尝试添加逻辑以测试单元格是否具有视觉效果视图并尝试添加一个逻辑效果视图后,我决定通过在我的自定义单元格初始化中将UITableViewCell子类化并在代码中使用UIBlurEffect构建UIVisualEffectView来解决此问题。 。 首先,我在第19行初始化了模糊效果,并且从UIBlurEffectStyleExtraLight,UIBlurEffectStyleLight和UIBlurEffectStyleDark中选择了三种不同的模糊。 初始化模糊效果后,我在第21行的视觉效果视图中使用了方便的initWithEffect:instancetype方法,在第23行将视图的框架设置为单元格的边界,并在第26行添加了子视图。 最后,我回头将情节提要中的单元原型类设置为我的自定义类,然后运行该项目。 在我的天气应用程序摄氏和华氏度(可在App Store中购买(无耻的插件!))中,我使用常规的视图控件并添加了表格视图,以便可以设置背景图像,并且单元格可以在静止的背景上移动。 它给了我想要的美感,但是却带来了一些意想不到的复杂性。 我将很快添加一个博客文章,以显示您知道要查找的内容后如何快速解决这些问题。 敬请关注!!!

什么是Google Firebase?

您好iOS工程师, 这是学习Google Firebase的好日子。 我们将对Firebase进行概述。 今天,我们将全面讨论Firebase。 在接下来的文章中,我们将讨论Firebase中的特定功能,这些功能将在将来的应用程序中使用。 因此,让我们开始看看Firebase可以提供什么。 火力基地? Firebase是一项可帮助您创建应用程序(应用程序)的服务。 还必须有其他权利吗? 是的,确实有,但是Firebase的核心是帮助您快速开发应用程序。 Firebase如何帮助您快速发展? Firebase在基础架构中可以使用大量工具来帮助您开发应用程序。 我们将很难自行创建这些资源。 Firebase提供了所需的资源,因此您可以成为单人或女性开发人员。 我们将专注于使Firebase对我们的iOS工程师如此有用的四个领域。 四个领域是: 1.发展 2.成长 3.赚 4.分析 让我们深入研究Develop和Analytics,因为这是我们将在创建的任何Firebase项目中使用的两者。 开发 发展是我们今后将花费大部分时间和精力的领域。 该领域包含我们将立即用于实际应用的大多数工具。 本节中的三个工具使我对Firebase感到兴奋。 认证方式 实时数据库 崩溃报告 什么是认证? 很好的问题,身份验证是在应用程序中验证用户的身份。 如今,无论何时使用几乎任何应用程序,都必须使用电子邮件,Google帐户,Facebook帐户或Twitter帐户进行注册。 这种登录方法是身份验证。 Firebase之所以如此出色,是因为您可以将这些方法登录到您的应用程序中,而无需创建后端登录过程。如果这样做,则部署我们的应用程序将花费更长的时间。 此外,我们可以安全地在所有设备上保存用户的数据。 如果我们有一个使用Firebase的网站和iOS应用程序,那么我们的客户只需要一个帐户即可。 在任一应用程序中创建的数据都将保存在一个位置,并在两个应用程序中使用。 用户能够访问该数据的唯一方法是登录应用程序。 我知道我们在这里都很聪明,并且可能意识到身份验证使用数据库。 那么什么是实时数据库? 实时数据库托管在Google服务器或我们所谓的云上。 假设您创建了一个网站(计算机),一个iOS应用程序(iPhone)和一个Android应用程序(Galaxy S7),允许人们下载和保存图片。 现在,在所有三个设备上,您下载了另一张图片。 实时或立即您将在每台设备上看到所有三张照片。 实时数据库非常强大,因为我们的客户可以立即访问他们所需的信息。 真的是山姆! 崩溃报告? 嗯是的 我会告诉你重要性。 想象一下您创建了这个很棒的应用程序,每个人都喜欢它。 您获得了大量下载,然后开始看到有关该应用程序崩溃的评论。 经过几个不安的夜晚,您终于解决了它。 您提交更新,发现几天后剩下一半的客户。 这个例子有点极端,但是会造成灾难性的后果,并且可能会毁掉一生中一次的机会。 […]

50 iOS面试问答第3部分

您好,第3部分已准备就绪! 如果还没有,请查看第1部分和第2部分 更新:2018年12月27日。 1-什么是Nil合并和三元运算符? 它很容易返回未包装的可选值或默认值。 如果没有值,则可以设置零或默认值。 2-什么样的JSONSerialization有ReadingOptions? mutableContainers指定将数组和字典创建为变量对象,而不是常量。 mutableLeaves指定将JSON对象图中的叶字符串创建为变量String的实例。 allowFragments指定解析器应允许不是Array或Dictionary实例的顶级对象。 3-如何防止用户在其设备上多次执行上述操作? 苹果在iOS 10中引入了DeviceCheck。该API使我们可以访问iOS设备中按设备,按开发人员的数据。 该解决方案比UserDefaults或Advertising Identifier更好。 DeviceCheck允许我们存储一个布尔值。 4-什么是DispatchGroup? DispatchGroup 允许工作的聚合同步。 我们可以使用它们来提交多个不同的工作项,并跟踪它们的完成时间,即使它们可能在不同的队列中运行。 如果在完成所有指定任务之前无法取得进展,此行为将很有帮助。 — Apple的文档 最基本的答案:如果在继续之前需要等待几个异步或同步操作,则可以使用DispatchGroup. 5-什么是RGR(红色-绿色-重构)? 红色,绿色和重构是TDD(测试驱动开发)的阶段。 红色:编写少量测试代码,通常不超过七行代码,然后观察失败。 绿色:编写少量生产代码。 同样,通常不超过七行代码,即可通过测试。 重构:测试通过了,您可以进行更改而不必担心。 清理您的代码。 这里有很多讲习班笔记。 6-我们在哪里使用依赖注入? 我们在iOS应用中使用情节提要或xib,然后创建了IBOutlets。 IBOutlet是与视图相关的属性。 这些在实例化时被注入到视图控制器中,这实质上是依赖注入的一种形式。 依赖注入有多种形式:构造函数注入,属性注入和方法注入。 7-请说明通知类型。 通知有两种类型:远程和本地。 远程通知需要连接到服务器。 本地通知不需要服务器连接。 本地通知会在设备上发生。 8-什么时候是我们项目中依赖注入的好时机? 您可以遵循一些准则。 规则1.可测试性对我们重要吗? 如果是这样,则必须在要测试的类中标识外部依赖项。 一旦注入依赖关系,我们就可以轻松地将真实服务替换为模拟服务,从而使其易于测试。 规则2.复杂的类具有复杂的依赖关系,包括应用程序级逻辑,或访问外部资源,例如磁盘或网络。 应用程序中的大多数类将很复杂,包括几乎所有控制器对象和大多数模型对象。 最简单的入门方法是在应用程序中选择一个复杂的类,然后在该类中查找用于初始化其他复杂对象的位置。 规则3.如果一个对象正在创建其他对象的实例,这些实例在其他对象内是共享的依赖关系,那么它就很适合进行依赖关系注入。 9-我们可以在集合类型上使用哪种订购功能? map(_:) :使用提供的闭包转换序列中的每个元素后,返回结果数组。 filter(_:) […]

从今以后,您将被称为ARKit-Emperor(ARKit 2.0示例代码)

很久以前,在一个遥远的星系中…… 这个时期iPhone SE和iPhone X从苹果商店中销毁了,AR市场受到了Pokemon GO的压力。 在战斗中,叛军间谍成功窃取了ARKit 2.0秘密计划的数据…… 这是什么? kboy-silvergym / ARKit-Emperor 功率! ARKit 2.0的强大功能! 通过在… github.com 上创建一个帐户为kboy-silvergym / ARKit-Emperor开发做出贡献 iOS 12已发布。 您已经使用过ARKit 2.0吗? 如果没有,请检查。 [ARKit-Sampler](https://github.com/shu223/ARKit-Sampler)的阴暗面。 Emperor为您提供了最实用的ARKit示例。 ARKit的力量无限! Doodle(ARKit 1.0〜) 您可以绘制真实空间! 此示例代码的性能并不理想,因为它每次您的手指移动都会添加一个新节点。 我所知道的最好方法是仅在您开始触摸屏幕并在移动手指期间更新其几何形状时添加节点。 请参阅[仅一行](https://justaline.withgoogle.com/)代码。 放置图片(ARKit 1.0〜) 将照片放入相框。 您可以在SceneKit上制作相框。 丰富平面检测(ARKit 1.5〜) ARKit 1.0可以使用平面检测,但是1.5可以使用更丰富的检测。 脸(ARKit 1.0〜) 通过ARKit2.0,您还可以检测到凝视和舌头。 本演示使用的是舌头检测。 永久备忘录(ARKit 2.0〜) 使用ARKit 2.0,您可以保存并加载ARWorldMap。 镜子(ARKit 2.0〜) 使用ARKit 2.0,它并不完美,但是对象会在环境中反射。 名片(ARKit 2.0〜) […]

有效地使用第三方库#decoupling

我最近读了我的一位同事的推文,说: “我们应该以更容易删除功能的方式设计类! 这表明事情真的脱钩了” 每次将第三方SDK /库添加到项目中时,请查看是否可以为其添加包装,并在应用程序中使用该包装。 这使您可以灵活地更改或更新库,而无需将来进行大量更改。 让我们来看看我们在上面讨论的情况下该如何做。 因此,我们将创建一个包装器(我们将其称为MAAnalyticsManager),这就是它的外观 现在,无论何时需要跟踪页面视图或事件,都可以直接在包装器或管理器上调用该方法,而不必直接调用MixPanel。 而且,如果以后需要更改为其他Google Analytics(分析)SDK,则只需更改一个文件即可。 那不是很棒!!

从头开始创建Marvel iOS应用。 Travis,Danger和Fastlane ..

这是一系列文章的第三部分,涵盖了如何使用许多不同的Pod和工具从头开始创建iOS应用,从而使您的生活更轻松。 如果您错过了前面的部分,请检查它们的第一部分和第二部分。 在这篇文章中,我将讨论持续集成Danger和Fastlane。 该项目的源代码可在此存储库中找到。 我为此帖子创建了一个名为v0.3的标签,您 只需克隆存储库并切换到标签v0.3。 持续集成 持续集成(CI)是一门广泛的主题,其中涉及许多教程和书籍,但它是一个相对简单的概念。 在投入生产之前,应尽可能频繁地集成代码以及早发现错误。 如ThoughtsWorks网站中所定义。 “持续集成(CI)是一种开发实践,它要求开发人员每天多次将代码集成到共享存储库中。然后,每个签入都通过自动构建进行验证,从而使团队能够及早发现问题。通过定期集成,您可以快速检测错误,并更轻松地找到它们。” “持续集成不会消除错误,但是确实可以使查找和删除错误变得更加容易。” Martin Fowler 在贝娄,您可以找到有关此主题的更多信息。 持续集成| ThoughtWorks 一家全球软件公司,专注于软件设计和交付。 我们提供专业的服务和产品,以及…… www.thoughtworks.com 基本上,我们必须有一些东西可以监视我们的存储库并运行自动构建。 测试 每次发生任何更改时都将部署过程。 那是CI服务器。 它们有各种形状和尺寸,您可以在这里找到它们的列表。 这篇博客文章将使用Travis,它是一个与github配合得很好的CI,并且是Github上托管的开源项目的主要选择。 特拉维斯 要使用travis,我们首先需要创建一个名为.travis.yml的文件 这就是全部,之后,您可以在每次将新的推送或PR添加到存储库时检查构建。 Travis可以像您期望的那样非常可定制,您可以找到许多不同的配置,它们具有有关此主题的大量文档。 我建议从一个简单的开始,并以此为基础。 同样值得一提的是,您可以看到在travis的脚本阶段中,我们仅调用两件事。 脚本: -快速通道测试 -捆绑执行程序的危险 第一个: -快速通道测试 是我们的自动化管道,是我们在上一篇博客文章中创建的自动化管道。 对于我们的示例,我们仅运行测试并生成覆盖率,但是我们可以做的还很多。 Fastlane可以处理和自动化您的整个管道,测试,构建,部署,生成和上传屏幕截图,发送通知等。 互联网上有许多涵盖所有这些主题的教程,您应该明确检查它们。 重要的是,一旦我们在开发人员机器上掌握了它,在CI中运行它就非常容易。 我们所需要的只是调用Fastlane的车道(例如:例如我们的“测试”),我们一切顺利。 注意事项:首先,请确保您的自动化管道在本地工作,它们带有CI,可以节省您的时间。 第二个: -捆绑执行程序的危险 全部关于代码审查……让我们深入了解它。 危险系统.. Danger是由Orta,Felix Krause和其他出色开发人员创建的令人惊叹的新工具。 危险在CI流程中运行,使团队有机会自动执行常见的代码审查琐事。 这提供了构建中的另一个逻辑步骤,通过此Danger可以帮助减少日常代码检查中的死记硬背任务。 您可以使用“危险”来整理团队规范。 让人们去思考更棘手的问题。 她通过根据您使用Ruby脚本语言创建的规则将消息保留在PR中来实现此目的。 […]

从0到1通知

有关在您的应用中实现出色的通知系统的设计建议以及能够做到这一点的基本设置。 当决定某个功能具有重要的意义(即通知功能)时,您必须始终记住为什么这样做甚至可以提供提示,但是提示是什么,而提示信息何时会停止,请想一想,您拥有哪些应用程序真是了不起经验? 看看您为什么这样想,做些引起您注意的事情,相信自己的直觉,并想一想您不想在通知中知道的内容。 重要的是要记住您要添加的任何功能中的新增功能,因此请不要忘记阅读有关上次更新中已添加功能的文章。 设计通知– WWDC 2018 –视频– Apple Developer 精心设计的通知是将及时信息传达给他们会发现的人们的有力方法…… developer.apple.com 用户通知中的新增功能– WWDC 2018 –视频– Apple Developer 通过显示… developer.apple.com ,本地通知和推送通知使您的应用程序可以及时向用户提供相关的相关信息 甚至能够在应用程序中获得通知的第一步都是要经过很长的过程才能获得通知,这分为两个挑战,一个是要从苹果公司获得适当的证书(假设您拥有开发者帐户),第二个是下载NWPusher,这是一个开源项目,可让您测试通知。 *发出通知的步骤之所以这么多,是因为出于安全原因,并且要测试通知,您需要将iPhone连接到笔记本电脑,模拟器无法为您提供帮助。 首先,创建一个项目,然后转到主根目录,即带有蓝色文档图标的文件,您将在项目上,在TARGETS上单击您的项目名称,然后在上部方案中选择功能,滚动直到您会找到“推送通知”并将其打开。 Apple开发人员网页https://developer.apple.com/。 在开发者的网页上登录您的帐户, 在开发人员的网页上,您会在左侧找到一个名为“标识符”的选项,然后单击“应用程序ID”,滚动直到找到应显示为可配置的“推送通知”,在底部有一个“编辑”按钮,然后单击在那里。 根据您的需求选择开发或生产证书,如果要测试并学习开发证书,请创建证书,是时候进行涉及“钥匙串访问”的下一步了,建议字总是使用快捷方式,按“命令”和“ f”,然后开始键入“钥匙串访问”,直到该选项自动完成。 在那里,您应该单击“钥匙串访问”上苹果旁边的右上角,单击“证书助手”和“从证书颁发机构请求证书”。 完成所有步骤之后,继续前进, 在此屏幕上,选择“保存到磁盘” 将其下载并放置在项目所在的文件中,使用NWPusher时此证书将非常有用,因为要具有此功能,您需要证书并在手机上对其进行测试。 这是上面的“钥匙串访问”。 这是到开源项目NWPusher的链接: 面条/ NWPusher OS X和iOS应用程序和框架可与Apple推送通知服务(APN)一起使用–oodlewerk / NWPusher github.com 使用此项目的方法有很多。“ noodlewerk”在他的github项目网页上解释了使用此软件的所有方法,都做得很棒,别忘了给它加注星标。 在这里,我将使用brew安装项目。 在终端上,键入“ brew install”,然后“ brew cask install pusher”。 现在该回到您的“钥匙串访问”了, 单击“推送证书”,然后选择“导出’Apple Development […]

Swift 4中的编码和解码

我知道我知道你一定像Swift 4 WTF! 不用担心,Swift 4尚未发布,但是您仍然可以使用Swift开发快照来体验Swift 4的功能。 如果您有兴趣安装Swift 4快照,请查看此链接。 有许多不同的方案,您要将类转换为数据表示形式。 一个非常普遍的需求是当您想将JSON数据作为HTTP正文发布时。 最常见的方法之一如下所示: JSONSerialization类负责返回Data对象,然后可以将其作为HTTPBody传递给请求。 Swift 4中的JSONEncoder和JSONDecoder Swift 4引入了JSONEncoder和JSONDecoder类,它们可以轻松地将对象转换为编码的JSON表示形式。 查看以下示例: 注意,使用了新的Codable协议,该协议使Language结构可编码和可解码。 更高版本的JSONEncoder类用于通过使用encode函数执行编码。 就像编码一样,解码也非常简单,如以下代码所示: 很简单吧! 通过使用协议和扩展,我们甚至可以使它更简单。 让我们创建一个自定义的Serializable协议,它将为我们执行编码。 可序列化 使用JSONEncoder和JSONDecoder很好,但是我们当然可以使它更无缝地执行编码和解码。 代替创建JSONEncoder的实例,类或结构应该能够自己编码。 看一下下面的Serializable协议,所有对编码感兴趣的模型都可以遵循该协议。 代替在每个类或结构中分别实现序列化功能,我们将使用协议扩展的功能来创建默认实现。 上面的代码将给您以下错误: 游乐场执行失败:错误:MyPlayground.playground:8:36:错误:参数类型“ Self”与预期的类型“ Encodable”不符 返回尝试? encoder.encode() 问题在于“自我”不是可编码的。 我们可以通过使Serializable协议符合Codable协议来轻松解决此问题,如下所示: 现在,您可以使用新的Serializable协议轻松编码模型,如下所示: 确保您的语言模型符合“可序列化”协议而不是“可编码”协议。 我相信,在构建依赖于网络服务并发布编码数据的应用程序时,Swift 4中的这些新进步将真正使开发人员受益。 我可以担任高级iOS开发人员。 如果您有兴趣,请在此处查看我的简历。 如果您喜欢这篇文章,那么您可能会对我的课程“ iOS精益控制器的完整指南 ”感兴趣。 本课程涵盖许多有用的架构模式,以构建更好的iOS应用程序。 享受74%的折扣,请单击以下链接: https://www.udemy.com/a-complete-guide-to-lean-controllers-in-ios/?couponCode=MAKEMELEAN

扩展UIActivityViewController

我的每日自拍应用程序Close-up一直是一种私人写真日记,但是我一直想为用户选择共享时提供丰富的共享选项。 UIActivityViewController显然是最好的选择,但是早在2015年,我想针对其中出现的现有应用程序自定义一些操作,以提供更好的体验。 因此,我编写了一个名为TJActivityViewController的UIActivityViewController子类,使您可以轻松地通过以下方法覆盖操作 覆盖特定操作或将正则表达式与块匹配的操作。 覆盖用于特定操作的项目。 当我今年早些时候写《 Burst》时,这个确切的组件非常方便再次共享。 因为我发现它是如此有用,所以今天我开放源TJActivityViewController供其他人使用! 我希望它可以使其他人使用UIActivityViewController代替自定义共享菜单,或者增强使用标准iOS共享表的体验。 它可以在GitHub上获得 ! 使用TJActivityViewController覆盖活动非常简单 [activityViewController overlayActivityType:/ *活动类型字符串* / withBlock:^ { //您的自定义替代。 }]; 您还可以使用以下方法自定义返回到活动的项目 [activityViewController overlayItemForActivityType:/ *活动类型字符串* / withBlock:^ id { / *通过活动共享的对象* /; }]; 我目前在我的应用中使用TJActivityViewController来 增强与Instagram,Snapchat,Facebook和Messenger的共享。 当人们通过电子邮件共享时,使用MFMailComposeViewController发送丰富的HTML电子邮件。 将创可贴放在与Twitter,Tumblr和iMessage共享的GIF上,在某些情况下,它们会将动画GIF视为静止图像。 当用户选择保存到设备时,将照片保存到专用于应用程序的专用相册中。 希望您也觉得它有用!

反应本地人— Mobil UygulamaGeliştirme

Mobil tarafta IOS 客观目标C veya Swift, Androidtabanlıtelefonlara ise java dili ile本机语言。 Bununyanında,javascript,使用JavaScript进行浏览。 在当地居民中反应当地人’denbahsedeceğiz。 反应Native facebooktarafındansunulan bir mobil uygulamageliştirmeçatısıdır。 IOS ve Androidtarafındanative kodlaraçevrilir。 Böylecetek kod ile birdençokplatforma mobil uygulamageliştirebilirsiniz。 Neden React Native’ıseçmeliyim吗? 反应本机gerçektennative’dir。 Uygulamlarınızıuzaktangüncellemeimkanısağlar。 脸谱gibibüyükbirdestekçisivar Webtabanlıuygulamageliştiricileriçinöğrenmesürecikısadır。 Uygulamageliştirmesüresinative’egörekısadır。 反应本地’de uygulamaperformansınıarttırmakiçin组件方法larınındoğrukullanımıoldukçaönemlidir。 1个构造函数 Başlangıç国家’lerinitanımladığımızalandır。 Sayfa ilkyüklendiğindeburayadüşer。 2分量WillMount 组件ekranıyerleştirilmeden渲染’danönceçalışmaktadır。 状态集etmekiçinuygundeğildir。 设置状态çağırıldığındansayfasürekli渲染edecektir。 3渲染 SayfaüzerindebulunantümUI komponentlerin hepsi bu alanda bulunur。 Bir component’inçalışmasıiçindiğermethodlar […]