Tag: 教程

教程:使用Swift 4进行地理编码

使用iOS本机SDK或Google Maps API将地址转换为位置点(纬度,经度)的指南。 地理编码是将邮政地址描述转换为地球表面某个位置(数字坐标的空间表示)的计算过程。 维基百科 在iOS上实现地理编码功能的一种免费,简便的方法是使用CoreLocation和CLGeocoder类。 CLGeocoder类提供用于在坐标(指定为纬度和经度)和该坐标的用户友好表示之间进行转换的服务。 坐标的用户友好表示形式通常包括与给定位置相对应的街道,城市,州和国家/地区信息,但它也可能包含相关的兴趣点,地标或其他标识信息。 有时候,简单/免费/快速的方法不一定是做某事的最佳方法。 在线上有很多地理编码API服务 。 其中一些是免费的,另一些是免费的,例如Google Maps 。 在本教程中,我们将实现并测试iOS本机地理编码和Google Maps地理编码服务以及世界各地的地址列表。 让我们说明一下,在创建我们的项目之前,我们需要做一些简单的事情: 1.1在Xcode上创建一个新项目。 打开Xcode,然后单击文件>新建>项目。 选择单视图应用程序作为模板,然后单击“下一步”并根据需要命名该项目(在我的情况下为BattleOfGeocoding )。 1.2安装CocoaPods。 现在,我们需要设置CocoaPods来管理Xcode项目的库依赖关系。 如果您以前从未使用过它: https://guides.cocoapods.org/using/getting-started.html 此时,我们需要在根文件夹上添加Podfile。 在Github上查看示例源代码。 教程:使用AI和Swift 4。 在iOS上建立自然而丰富的对话体验。 教程:创建一个iOS Swift聊天机器人。 如何设计和创建您的第一个天气聊天机器人应用程序。

学习如何自学

我们都使用应用程序。 我们整天使用它们,一天多次使用它们来完成许多不同的事情。 我们依靠这些工具来帮助我们度过一天,这与我们早上依靠汽车开车或依靠杂货店始终提供食物的方式不同。 这些工具(应用程序,汽车,杂货店等)对于我们的现代生活是如此重要,以至于如果它们断裂或消失,我们将无可奈何。 重要的是要知道这些东西是如何工作的,如果它们不能正常工作,我们可以制造出更好的东西,如果它们完全消失,我们可以进行重建。 出于这个原因,我决定对支持我的生活的工具如何运作有深入的了解。 随着时间的流逝,我已经学会了内燃的基本原理,并且可以在发动机熄火时更换汽车上的火花塞。 当然,我可以建立您的基本网站,但是对iOS应用程序的工作方式有深刻的了解吗? 对我来说这是新事物。 在我的前两篇文章中,我告诉您,我将学习如何在公共场合构建应用程序以及该应用程序将是什么。 从那时起,我一直在研究最好的方法来教自己如何做到这一点。 要构建可在iPhone(iPad,Mac等)上使用的应用,您需要使用两种编程语言之一。 这些天有一种ZILLION编程语言,所以我知道,甚至考虑到它们的存在就更令人生畏,更不用说开始研究一种了。 但是有些粗略的搜索会告诉您,在为iOS(苹果的移动操作系统)构建应用程序时,您可以将重点缩小到两个:Objective-C和Swift。 苹果几年前专门创建了Swift,目的是简化iOS应用的编写。 在此之前,所有iOS应用都是使用Objective-C编写的。 您仍然可以使用Objective-C来构建应用程序,但是为什么要使用Apple支持的这种新颖的新语言,为什么要这样做呢? 这样就解决了, 我将学习Swift。 自学编码的切入点很多。 从阅读来自世界各地的开发人员的随机教程到参加斯坦福大学提供的为期9周的iOS开发课程,您可以做任何事情。 我花了一些时间研究自己的选择,同时牢记我所寻找的道路理想情况下应该是自由,有趣,精心制作的,并从一开始就让我起步, 这是我可以找到的最好的Swift入门开发资源列表。 Udacity —使用Swift进行iOS开发简介 Udacity是位于Codeacademy,Code School,Treehouse等行列中的新型在线Web开发教育平台中的众多平台之一。它提供免费课程和付费课程以及订阅选项。 这是他们的免费课程之一。 该说明是通过一系列干净的,前瞻性的视频完成的。 这个免费的iOS教程让学生开发语音转换器应用程序。 也许这与我在飞机上见面的想法太不同了? 树屋-了解Swift 树屋设计精美。 超级友好的用户界面和受欢迎的颜色对该设计师非常有吸引力。 他们提供7天的免费试用期,虽然不错,但可能不足以让我得到所需的东西。 如果其他免费服务选项不足,我可能会回到这一点。 学习技巧 这个可爱的小目录提供了按难度级别组织的大量Swift开发资源的链接。 他们链接到的这一教程是免费的,并且看起来很全面。 可能是一个不错的起点。 斯坦福大学-使用Swift开发iOS 9应用 令人惊讶的是,有许多世界一流的机构免费在线提供课程资料。 我喜欢这个,主要是因为声望。 在斯坦福大学上课真是太酷了。 但是,教学风格似乎很宽松,所需的知识比我多。 一旦滚动,我可能会回来看看是否可行。 然后我将打印出一个伪造的斯坦福学位并将其贴在墙上😉 雷·温德利希(Ray Wenderlich)—斯威夫特 这个网站上有很多很棒的开发教程。 他的“斯威夫特”课从绝对的平方开始,即我所在的地方。 它是免费的,而且读起来很清晰。 唯一的缺点是他的网站非常注重游戏。 我的飞机上遇见人应用程序不是游戏,但是本教程提供的基本知识可能适用于各种应用程序吗? […]

Swift 101 —可选

今天,我将在博客中介绍Swift中的另一个基本概念-可选变量。 苹果将​​可选内容描述为: 您可以在不存在值的情况下使用可选选项 。 可选选项代表两种可能性:要么有一个值,要么可以打开该可选选项以访问该值,或者根本没有任何值。 可选变量有? 符号定义后告诉编译器该变量可能为nil 。 您可以在这里阅读更多关于nil信息。 为了将变量定义为可选变量,必须指定对象类型,例如Int , Bool或String 。 让我们看一个例子: var optionalInt:整数? var optionalBool:布尔? var optionalString:字符串? 您会注意到上面示例中的所有变量都是var ,这是因为在let时不能将变量分配为nil 。 可nillable对象必须始终具有以后可以分配具体值的能力,否则编译器将在内存中保留常量nil变量,而不能在以后进行更改(变异)。 在此处阅读有关let vs var更多信息。 因此,以下示例将无法编译: 让optionalString:字符串? 外卖小贴士 可选变量必须使用类型声明。 可选变量必须为var not let 。 在此处获取此博客的游乐场。 雨燕快乐!

如何在iOS 12中构建页面

每当在手机中安装新的应用程序时,我们大多数人都不了解该应用程序的工作原理,其功能以及使用方法。 这些是登陆页面向我们介绍功能的完美时机。 登陆页面对于用户体验来说是很棒的和很酷的,但是当将虚拟内容显示为电子书时,登陆页面也非常有用。 我们使用哪些组件来构建页面? UIPageViewController:页面导航的控制逻辑 PagesViewModel:适应页面模型 SinglePageModel:页面中的内容 1.构建我们的UIPageViewController 首先,我们将UIPageViewController子类化以提供自定义。 在这里,我们使用一个便利的初始化程序,该初始化程序允许我们设置水平或垂直滚动​​的页面。 便利init(水平:布尔){如果水平{self.init(transitionStyle:.scroll,navigationOrientation:.horizo​​ntal,选项:无)}} else {self.init(transitionStyle:.scroll,navigationOrientation:.vertical,选项:nil) } self.viewModel = LandingViewModel()self.viewModel?.pages = self.defaultPageViewModels()self.pagesViewControllers = self.pageViewControllers(self.viewModel?.pages)}} ViewModel是在初始化期间与单个页面视图控制器一起设置的,其中单个页面视图控制器仅在情况下显示文本。 每个页面视图模型都是在defaultPageViewModels方法中创建的,该方法将内容存储在页面中。 这里没有提供视图模型和单页视图控制器的详细信息,因为它只是UIViewController。 为UIPageViewController提供多个Pages View Controllers时,有两种方法可以实现。 一种是通过setViewControllers一次给它一个,这可能需要一个或两个UIViewController作为参数。 为了支持基于手势的导航,我们必须通过UIPageViewController数据源提供UIViewController。 数据源中有两种方法。 pageViewController(_,viewControllerAfter 🙂 pageViewController(_,viewControllerBefore 🙂 在第一个中,我们需要获取当前页面之后的下一个页面视图控制器。 卫队让viewController = viewController为? SinglePageVC,让index = pagesViewControllers.firstIndex(of:viewController)else {return nil} let nextIndex = index + 1guard pagesViewControllers.count> nextIndex else {return nil}返回pagesViewControllers [nextIndex] […]

征服ReactiveSwift:基本体(第2部分)

在征服ReactiveSwift系列的第一部分中,我们分析了命令式方法与功能性反应式方法之间的区别。 在本文中,我们将从ReactiveSwift的各种基元(基本构建块)开始,深入研究ReactiveSwift的领域。 ReactiveSwift的作者将其描述如下: ReactiveSwift提供了可组合的,声明性的和灵活的原语,这些原语是围绕随着时间流逝的价值流这一宏伟概念而构建的。 ReactiveSwift带有许多强大的原语,使您能够以功能性的反应方式编写代码。 学习这些原语的最简单方法是根据它们的角色将它们分为不同的类别。 请参考下图。 正如我们在上一篇文章中讨论的那样,在反应式编程中,我们针对随时间的一系列变化而不是针对特定时间点的状态对系统进行建模。 “ 源 ”类别下的原语负责这些更改的生成和传播。 在该类别下,我们有以下基元: Event,Signal,Signal Producer,Action 。 1.活动 事件表示发生了某些事情。 它是流的基本传输单位。 事件有四种类型: 值:具有有效信息的事件 失败:表示错误的事件 已完成:表示流结束的事件。 此事件后将不再发出其他事件。 中断:表示事件产生被中断。 2.信号 信号是事件的单向流。 可以通过观察员订阅来访问信号的每个事件。 观察信号不会给信号带来任何副作用。 所有事件立即发送给给定信号的所有观察者。 3.信号产生器 顾名思义, SignalProducer是产生信号的东西。 它封装了可以在以后开始的工作(也可以重复)。 换句话说, SignalProducer生产者封装了延迟且可重复的工作。 启动它时,将创建一个新信号,该信号将发出信号,作为调用封装工作的结果。 因此,由于需要启动SignalProducer ,因此据说它很冷,而Signal是温暖的。 4.行动 在延迟和可重复的工作中也使用了动作 。 它封装了SignalProducer的工作。 我们要更好地控制动作而不是信号产生器 。 例如,我们可以通过发送不同的输入值来控制输出。 可以启用或禁用它。 可以通过属性 (如下所述)来被动地控制其状态。 当用输入调用时, 动作将输入和最新状态应用于预定义的工作,并将输出推送给观察者。 5.财产 属性是一个可观察的框,它存储一个值并通知观察者该值的将来更改。 它具有用于生产者和信号的吸气剂,可发出可以观察到的值。 可以使用初始值和Signal , […]

如何在Windows上进行Swift

第1步–从Microsoft Store安装Ubuntu Shell 在为Linux的Windows子系统安装任何发行版之前,必须以管理员身份打开PowerShell并运行: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux 从Microsoft商店下载Ubuntu Shell。 第2步-安装Swift 首先,请确保您拥有系统上最新的软件包列表,然后安装Swift的必备组件,其中包括clang和Python 2.7组件: sudo apt-get更新 须藤apt-get install clang libicu-dev libpython2.7 现在,您将需要打开Ubuntu Shell并在Ubuntu System中创建用户帐户。 接下来,从swift.org 下载最新的Swift快照。 wget https://swift.org/builds/swift-4.2.1-release/ubuntu1804/swift-4.2.1-RELEASE/swift-4.2.1-RELEASE-ubuntu18.04.tar.gz 解压缩下载的档案。 tar xzf swift-4.2.1-RELEASE-ubuntu18.04.tar.gz 通过输入pwd确保下载存档的位置。 我将归档文件下载到/home/timnazar/downloads并将解压缩的文件移动到/etc/swift-4.2.1 。 然后将Swift工具链添加到您的PATH中: 导出PATH = /etc/swift-4.2.1/usr/bin:”${PATH }“ 输入此命令只会将swift命令添加到当前Shell会话的路径中。 为了确保在以后的会话中自动添加该文件,请将其添加到.bashrc文件中。 打开.bashrc文件: 纳米〜/ .bashrc 在文件末尾添加以下行: #导入Swift工具链 导出PATH = /etc/swift-4.2.1/usr/bin :“ $ {PATH}” 保存并退出文件。 为了确保一切正常,请运行swift –version命令: […]

自定义字体。 附录2. iOS Travel Guide应用程序

步骤2:将字体包括到项目Info.plist中 转到Info.plist文件,并添加一个新键“ 应用程序提供的字体” 。 将字体的{ 文件名}添加到列表中。 步骤3:初始化UIFont实例 UIFont(名称:“ OpenSans”,大小:12)

274:如何在iOS消息中添加Animoji和Bitmoji贴纸

将多个贴纸固定到iPhone短信(😎) 您是否知道可以将多个Animoji和Bitmoji贴纸固定到邮件中作为快速回复或只是为了娱乐? 本教程:如何在iOS消息(文本)中将Animoji和Bitmoji贴纸固定为Tapback快速回复。 贴纸会立即交付,您可以固定多个贴纸并将其删除。 在对话线程中混合Animoji和Bitmoji贴纸。 仅适用于iOS。 Animoji:仅在iPhone X上可用。 使用面部和语音识别为iOS中的角色设置动画。 链接 Bitmoji:创建自己的个人表情符号。 发送消息和任何应用程序。 链接 如何在消息中添加Animoji和Bitmoji贴纸 iOS 10或更高版本 教程前:Tapback快速回复 双击任何消息框以获得“ Tapback选项” 这类似于添加贴纸,非常有用的功能 消息中的Tapback已在iOS 10中发布 用表达式响应消息 表达式包括:心脏,大拇指向上/向下,HaHa,感叹号,问号 Tapback表达式固定到消息并立即发送

iOS中的架构模式

在最近的过去,我一直在花一些时间来了解大多数软件开发人员所犯的菜鸟错误。 老实说,我经常被召唤。 但是,我最内gui的一个错误是,在开始项目之前没有计划。 这对我们最好的人来说已经发生了。 从第一天开始,您就可以开始这个令人惊叹的全新闪亮项目。 这个项目的成功,潮起潮落可以这么说。 通常,这种兴奋会击中应该做出合理决策的大脑部分。 因此,您该怎么做,您会立即开始编写代码。 五天后,该项目开始呈螺旋式下降。 您开始想象自己对这个项目的判断有误。 毕竟,这可能不是一个很酷的项目,也许这是一个很好的旧诱饵和转换案例。 但是事实是,您就是问题所在。 这不是项目,从来没有。 该项目保持不变,是您改变了。 💔如果您不计划,那么很可能会迷失其中。 兴奋消散之后,您将得到的只是意大利面条代码。 然后,您很可能会放弃它,或者更糟糕的是,仍然编写可怕的,没有灵感的代码。 现在我们已经大声疾呼了,让我们看一下要计划的最重要的事情之一。 所有冰雹建筑模式! 👯 您问什么架构模式? 它是对常见问题的通用可重用解决方案。 你为什么要关心它? 架构模式使您和您的团队成员的工作更加轻松。 由于关注点分离,因此更容易调试和浏览代码库。 哇! 那是很多单词,没有代码。 现在您仍然在这里,我将为您提供一些代码。 🎉 聊够了,给我看看代码!!! MVC 我们将从这个非常常见但被误解的模式start开始。 MVC已经存在了很长时间。 您知道MVC,这就是隔壁的低维护模式。 如果您已经编写了iOS代码,则可能使用了MVC模式。 这是构建iOS SDK的模式。 这种模式将所有代码分为模型,视图和控制器。 模型; 这是数据所在的位置。 它负责持久性,建模对象和解析。 视图; 这负责与用户进行交互的所有内容,即在屏幕上看到的内容,例如标签和文本字段。 控制器; 这在模型和视图之间进行中介。 MVC示例 如上所示,该模型基本上是对数据进行建模。 在此示例中,它将膳食数据项描述为具有两个属性。 在此示例中,视图和视图控制器紧密耦合。 如果有人要问MVC中的视图和视图控制器之间有什么区别,我会说我不确定。 因此,MVC无法分离关注点 。 由于视图控制器趋于庞大并且几乎无法导航,因此它被命名为Massive View Controller。 […]

早期制作-圈子布局

最近,我们发布了Early Game Alarm 2.0,它以7种语言提供并采用了全新的设计,因此我们决定就在(几乎)3年的开发中遇到的各种问题分享我们的经验。 我以前的帖子是关于页面布局的 ,我们曾用来向用户介绍可用的游戏和游戏包。 这将继续解决自定义布局的问题,我将使用一个简单的项目来说明我们如何在主屏幕上排列圆形警报。 在上面的图像中,您可以看到它在应用程序中的外观,在下面的图像中,我们将尝试在本教程中实现。 您可以从此链接下载完整的代码。 因此,任务很简单:我们正在收集特定半径的蓝色圆圈。 半径值显示在中间的标签上。 好的,它们不一定非要是蓝色-您可以选择任何想要的颜色。 让我们开始吧! 注意1:您可以 在 Byteout Software博客 上 找到具有 更好格式 的原始文章 。 注意2:本教程适用于已经具有自动布局和集合视图经验的开发人员。 我们不会详细介绍每个步骤。 对于初学者的教程,我建议从 Ray Wenderlich 教程开始。 步骤1:情节提要设置 创建新项目后,在情节提要中将获得一个视图控制器(类ViewController)。 对于本演示,我们将使用该演示。 让我们在Storyboard中添加以下内容:1个集合视图和1个标签在集合视图单元格中。 集合视图设置: 让我们将集合视图的顶部,底部,尾部和前部约束设置为0值。 不要忘记将ViewController连接为数据源并为集合视图委托。 单元格设置: 在超级视图(单元格)中水平和垂直居中放置标签 为背景和文本设置漂亮的字体和颜色 将单元格标识符设置为“ CircleCell” 创建自定义UICollectionViewCell(例如CircleCell)并连接插座。 例如,如果您不知道如何,可以查看此帖子。 步骤2:资料来源 现在,要实际显示单元格,我们需要实现UICollectionViewDataSource方法。 在ViewController.m中添加以下代码: // ViewController.m @interface ViewController () @property (strong, nonatomic) NSMutableArray *dataSource; […]