Tag: 迅捷

在Swift中以编程方式创建UIViews

使用PureLayout具有视图约束 期待什么? 了解iOS屏幕 查看层次结构 何时以编程方式构建视图 如何组织我们的代码(MVC模式) 构建自定义类(UIView) Twitter iOS应用示例 !Massive View控制器 设置约束(PureLayout) 了解iOS屏幕 任何iOS应用程序都有很多视图。 这些视图需要指定四个值才能显示: x,y,width,height 。 有三种不同的方式来构建这些视图: 情节提要 , Nib 文件和Programmatically 。 iOS sdk(UIKit)中有一个框架,其中包含一组标准子类,这些子类的范围从简单的按钮到许多其他视图对象之间的复杂表。 例如,UILabel对象绘制文本字符串,而UIImageView对象绘制图像。 视图可以嵌入其他视图并创建复杂的视觉层次结构。 这将在要嵌入的视图 (称为subview )和进行嵌入的父视图(称为superview )之间创建父子关系。 查看层次结构 视图的组织方式不仅影响应用程序的外观,还影响应用程序对更改和事件的响应方式。 例如,视图层次结构中的父子关系确定哪些对象可以处理特定的触摸事件。 同样,父子关系定义每个视图如何响应界面方向更改。 何时以编程方式构建视图 在满足以下条件时,使用自定义代码通常是一个很好的选择: 动态布局 具有效果,圆角,阴影等的视图 使用情节提要的任何情况都很复杂。 如何组织我们的代码(MVC模式) Model-View-Controller可能是最常用的设计模式。 从iOS开发开始,通常会遇到Massive View Controller问题 :View Controllers常常变得太大,包含难以真正修改或重构的所有功能。 通过遵循这种模式,我们确保项目中的每个类都是Controller,Model或View。 这样可以更轻松地以编程方式创建所有视图,而无需创建意大利面条怪兽。 显然,我们可以有其他组和类,但是应用程序的核心包含在这三个类别中。 入门 启动新项目时,Xcode使用情节提要板对其进行初始化。 为了创建我们的自定义视图,我们需要丢弃情节提要。 接下来,创建两个文件: ProfileView作为View类别下的UIView类,以及ProfileViewController作为Controller类别下的UIViewController类。 […]

使用CocoaPods和Carthage分发封闭源框架

每个开发人员都会不时地努力工作。 为了实现我们想要的功能,我们从博客,书籍,Github页面(源代码,要点,问题–顺便阅读Github问题可能会非常有帮助)中进行阅读,堆栈溢出线程等。我们从上述所有来源中收集很少的信息并收集它们寻找解决方案。 对于我们大多数人来说,在解决了我们的问题之后,我们就解决了。 但是,如果我们忘记了,或者我们不准备再做一次该怎么办? 写下我们在此过程中遇到的挑战是一个好习惯,但是我们当中有多少人呢? 大多数时候,我们选择we懒的方式。 我会记住它,或者会再次找到相关的东西。 这次,我将改变态度,并写出在与CocoaPods和Carthage一起作为封闭源项目分发我们的框架时遇到的挑战。 我希望这篇文章可以帮助某人节省时间并保持神经😄 让我们从列出我们正在做的事情开始: 我们正在构建一个简单的框架(本例中为付款结帐服务)。 现在,我们自己完成所有工作,这意味着我们的框架没有内部依赖性。 (好吧,如果您嵌套了依赖项,那么本文将不再涉及它们,因此,您将学到更多内容,但是请相信我,它们并不难。) 框架使用Objective-C编写,以支持两种语言。 尽管我们是Swift的粉丝,但出于某些考虑,我们还是选择了Obj-C。 (如果您拥有Swift框架,则可以像本文中一样应用所有内容,因此不用担心👊🏻) 我们希望将代码作为封闭源分发。 因此,我们将分发通用二进制文件(.framework文件)。 通用意味着该宝贝将在物理设备和模拟器的所有体系结构上工作。 我们正在使用Github作为我们框架的宿主。 我听说在进行聊天之前已经足够了,在我们开始之前,我假设您都已经在Mac上安装了CocoaPods和Carthage并熟悉它们和一些终端命令(实际上,我确定,因为您要分发您的框架以及一些依赖项管理器😄)。 迦太基 https://github.com/Carthage/Carthage/pull/1760,直到出现该拉取请求,您才能将框架发布为封闭源。 它相对较新,因为它已于今年2月14日❤️推送回购。 (编码code真是糟糕的一天) 迦太基手册将这一过程命名为将预先构建的框架归档到一个zip文件中 ,该文件缺少有关如何读取日志的信息,等等。我们现在将进行遍历。 如果Carthage附加到项目存储库上的GitHub Release或通过二进制项目定义文件,它们可以自动使用预构建的框架,而不是从头开始构建。 要为特定标签提供预构建的框架,应将所有受支持平台的二进制文件一起压缩到一个存档中,并且该存档应附加到与该标签相对应的已发布发行版中。 附件名称中应包含.framework (例如ReactiveCocoa.framework.zip ),以向Carthage指示其包含二进制文件。 您可以使用carthage archive命令执行上述归档操作,如下所示: 迦太基建造-无漏电流 迦太基档案YourFrameworkName 开始之前,请在Xcode上打开框架项目,然后通过Command + Option + Shift + K干净地构建项目。 (清洁文件夹会在大多数情况下将您从恶魔中拯救出来) 打开一个终端并导航到您的项目文件夹。 carthage build –no-skip-current到终端。 (首先,我将显示失败的构建和处理方法。然后,我们将继续)

iOS中的分支Deeplink处理

什么是Deeplink? 在移动应用程序的上下文中, 深层链接是由统一资源标识符(URI)组成的URL,该URL链接到移动应用程序中的特定位置,而不仅仅是启动应用程序。 为什么要深层链接? 通过网站推广移动应用 最佳用户体验 通过广告横幅展示营销 通过吸引用户使用定制的电子邮件来进行电子邮件营销 延迟深层链接!! 延迟深度链接是移动深度链接的各个方面之一,它描述了深度链接到尚未安装的应用程序的原理。 在这种情况下,深度链接将被“推迟”,直到用户安装该应用程序为止。 单击延迟的深层链接后,它将导航到App Store / Play商店,并且在安装应用程序后,它将导航到应用程序内的特定位置。 如果已经安装了应用程序,它将直接启动该应用程序,并打开该应用程序内的特定位置。 通用链接! 从iOS 9开始,Apple引入了通用链接。 单击通用链接时,iOS会检查是否已安装支持链接的应用程序并打开相应的应用程序,否则将在Web浏览器中打开URL(链接)。 (对于运行9.0之前的iOS版本的用户,点击通用链接可在默认Web浏览器中打开该链接) 使用Branch SDK在iOS中集成延迟的深度链接 步骤1:安装Branch SDK 使用 CocoaPods 平台:ios,“ 10.0” 目标“ APP_NAME” use_frameworks! 吊舱“分支” 结束 然后运行“ pod install” 使用 迦太基 github“ BranchMetrics / ios-branch-deep-linking” 使用 源代码 手动安装Branch 将Branch.framework到Embedded Binaries ( Copy items if needed选择Copy items if […]

现代MVC

当iPhone仅是第三部时,我在Apple Developer门户上有关iOS编程的第一篇教程的开头看到了此图: (仍然存在类似的文章,并且图表在那里:Cocoa核心能力。模型-视图-控制器) 该图展示了基本的iOS体系结构模式MVC 。 10年前,我以一种非常简单的方式理解了该图: UIView,UIScrollView或UITableView是该图上的视图 。 作为开发人员,我将它们安排在Interface Builder中的一个场景上,并将它们与我的源代码(在视图控制器中定义的出口和动作)绑定在一起。 最后一个正是MVC图中的控制器 。 我的应用程序将用户数据存储在例如文本文件中,或者在更复杂的情况下通过Core Data存储。 图表中的模型是允许访问此数据的类。 要添加的另一件事: 模型中没有业务逻辑代码,该模型不与视图通信。 视图控制器负责创建所有视图和模型,并在它们之间进行通信。 这样简单的系统的行为很明显:用户与视图进行交互,并且他的动作被传递给视图控制器。 最后一个执行计算,更改其自己的状态,并且此状态反映在视图中。 如果用户操作需要更改模型 ,则视图控制器会调用该模型进行更改。 如果模型发生更改,则会将该更改通知给视图控制器 。 视图控制器就是其中之一,它可以更新视图 。 这是对这种基本模式的简化甚至天真的理解。 但是它允许开发简单的应用程序,例如计算器或绘画工具。 我想展示一种开发和维护更复杂的应用程序的方法。 首先,让我们变换上面的图并以分层样式绘制它。 它使人想起大学时代熟悉的常见应用程序架构图: 该层是一个非常时髦的术语。 分层样式无处不在,包括应用程序体系结构。 我当时的所有项目都从该图开始,具有三个应用程序层:用户界面,业务逻辑和数据。 所有应用程序对象都属于这些层之一。 数据层和用户界面不进行通信,而是通过业务逻辑进行通信。 让我们复杂化该分层MVC图。 View-controller创建模型并在发生更改时调用它,并在图中显示为箭头。 箭头从视图控制器到视图 — 视图控制器创建所有视图 ,并在其状态或模型发生更改时对其进行更新。 该模型对视图控制器一无所知,如果模型发生更改,它会发布有关该视图的通知,或者更常见的是, 视图控制器会观察到模型更改。 它在运行时发生,我更喜欢使用虚线从模型到视图控制器绘制此箭头。 虚线箭头还应该显示从视图到视图控制器的连接 :用户在运行时与视图进行交互,但是视图不直接调用视图控制器 , 视图不知道视图控制器界面并通过Target-Action Design模式将用户操作传递给视图控制器 。 这是MVC的最简单或理想形式,适用于仅由一个视图控制器构造的小型应用程序。 让我们再添加一个view-controller 。 例如,单击视图控制器中的按钮(上面带有一个视图 […]

Xcode-swift3自动布局

最佳编程工具“ Xcode”中最好的功能之一是“自动布局”,当我们为iPhone应用程序设计场景时,如果您不熟悉前端语言(就像我一样),那将是最困难的部分开发应用程序。 现在,Apple为我们创建了一份礼物,即Xcode中的Auto布局! 第一种做法是在同一水平线上制作三个图像视图,它们必须自动具有相同的高度和相同的宽度,并且width:height应该为1:2,并且到屏幕两边的距离应该分别为20邻居是10岁,你可以看到我在图片中所做的 接下来的做法是让两个按钮并排放置,位于屏幕的垂直中心,彼此之间的距离为10,看我在图片中的操作方式 在这种情况下,我使左按钮在主视图的中心变为-5,右按钮将在中心的5指向中心,以使拖曳按钮彼此之间相距10个点,并且始终位于屏幕的中心。 在下一种情况下,我必须在同一水平线上创建三个按钮,彼此之间以及与屏幕侧之间的距离相同,并且该距离随着设备的大小而增加或减少。 在这种情况下,最棘手的部分是没有直接坐着的东西可以使物品之间的距离相等(只有大小可以做到),为解决此问题,我拖动了四个视图以分离按钮,并将彼此之间的距离设置为0,然后将四个视图的大小设置为自动相同,因此彼此之间的按钮以及屏幕的大小将看起来相同。 请看下面的图片(我对这些视图使用不同的颜色以使其清晰可见) 下图是我以前制作的“唐诗三百首”应用程序,在该应用程序中,我也使用自动布局来控制场景,例如,在文本视图中显示诗人的内容,并且约束以控制其在场景中的高度,宽度和位置。 自动布局确实是Apple编写的给程序员的礼物,它可以帮助我们更轻松地设计自己的应用程序! 现在就尝试学习它!

复活节特卖-$ 10.99课程-结束04/02

大家好, 大家复活节快乐! 这是非常繁忙的一周。 我已经为数门课程推出了大量更新。 查看以下一些更新: 掌握iOS版ARKit 使用ARKit缩放,旋转和移动虚拟对象 使用ARKit构建增强现实广告体验 将3D虚拟模型下载到ARKit应用 使用Swift在iOS中进行区块链编程 实际的区块链现实世界示例-行驶记录历史 使用蒸气掌握服务器端Swift 使用蒸气构建聊天应用 使用JavaScript进行区块链编程 实际的区块链现实世界示例-行驶记录历史 为了庆祝复活节和最新消息,我为部分课程进行了周末促销。 您只需$ 10.99即可获得我的课程。 促销将于2018年4月2日结束 。 在下面查看我的精彩课程: 使用Swift在iOS中进行区块链编程 精通iOS版Core ML 在iOS中使用Swift的MVVM设计模式 使用Swift掌握适用于iOS的ARKit 使用蒸气掌握服务器端Swift 使用JavaScript进行区块链编程 我真的希望您喜欢这些课程。 我已经在为课程添加更多新的令人惊奇的内容,这将在几周内准备就绪。 非常感谢您支持我的课程。 如果您有几分钟的时间,那么我们将非常感谢您的评分和评价。 您的评分/评价确实有助于使课程前进,添加新内容并支付账单😉 非常感谢你, Azam

在MKMapView上绘图

我在MKMapView上绘制折线和多边形的笔记 首先,将“地图视图”拖动到“视图控制器”并添加约束。 将此地图视图拖动到视图控制器以创建@IBOutlet。 切记要使View Controller符合MKMapViewDelegate并将委托函数添加到View Controller中,如下所示: 您可以根据自己的喜好设置颜色。 现在开始绘制。 在视图控制器中添加一个保存坐标的属性 变量点= [CLLocationCoordinate2D]() 在本教程中,将isUserInteractionEnabled设置为false,以便不会拖动地图。 @IBOutlet弱var mapView:MKMapView! 覆盖func viewDidLoad(){ super.viewDidLoad() mapView.isUserInteractionEnabled = false } 现在我们需要重写touchesBegan函数: 覆盖func touchesBegan(_ touches:Set ,事件:UIEvent?){ mapView.removeOverlays(mapView.overlays) 如果让touch = touches.first { 让坐标= mapView.convert(touch.location(in:mapView),toCoordinateFrom:mapView) points.append(坐标) } } 上面的代码在“地图视图”上检测触摸位置并进行隐式协调。 然后,将该坐标添加到点数组。 覆盖函数touchesMoved获取路径上的每个点: 覆盖func touchesMoved(_ touches:Set ,事件:UIEvent?){ 如果让touch = touches.first { 让坐标= mapView.convert(touch.location(in:mapView),toCoordinateFrom:mapView) points.append(坐标) 让折线= MKPolyline(坐标:点,计数:points.count) mapView.add(折线) } 最后,用MKPolygon完成绘图以突出显示选择区域。 […]

ARC Swift教程

ARC的功能 每次通过init()创建新的类实例时, ARC每次都会分配一块内存来存储信息。 有关实例类型及其值的信息存储在内存中。 当不再需要类实例时,它将通过deinit()自动释放内存空间,以用于进一步的类实例存储和检索。 ARC跟踪当前引用的类实例的属性,常量和变量,以便将deinit()仅应用于那些未使用的实例。 ARC维护对这些类实例属性,常量和变量的“强大引用”,以在当前使用类实例时限制释放。 有关ARC工作原理的更多信息,请访问Apple开发人员文档 1内存管理 内存管理在您要编写的任何应用程序中都至关重要。 这是由于移动设备中的硬件限制。 1.1 MRR 过去, 可可开发人员负责整个MRR (手动保留版本)中的内存管理资源。 Vehicle * cloudCar = [[Vehicle Alloc ] int]; // .. NSString *模型= cloudCar.model; // .. [cloudCar 发布 ] alloc方法用于创建对象并声明所有权开销,而release用于释放所有所有权对象。 1.2自动参考计数(ARC) 2011年,Apple转向自动参考计数。 在大多数情况下,快速进行内存管理是可行的,并且我们对内存管理没有做任何事情。 当不再需要类实例时,ARC会自动冻结内存使用。 每次一个类都是实例时,ARC会为该实例分配一个内存。 这部分内存包含与实例类型相关的信息。 var cloudCar = Vehicle() 然后,如果不再需要该实例,则可以释放分配给其他对象的空间。 var cloudCar:车辆? cloudCar =车辆() cloudCar =零 当然,如果从内存中释放了cloudCar ,但您仍然使用它,则应用程序将崩溃。 💣🤗 […]

通过添加删除控制进度儿童

默认情况下,控制Progress子级仅使将子级添加到Progress实例变得容易,而默认情况下则无法删除。 当您要使用一个随时间推移具有不同子级的Progress实例时,这可能会很有用。 使用自定义类MutableProgress使这成为可能。 通过将进度子类化来控制进度儿童 自Swift 3.0起, NSProgress实例已重命名为Progress ,它是在Swift中用于进度报告的主要类。 通过我们自己管理孩子,我们可以控制孩子并增加删除孩子的可能性。 // Remove the Video upload progress, as the video file has been deleted by the user during upload. totalUploadProgress.removeChild(videoUploadProgress) 通过这样做,我们需要确保正确广播更新。 因此,我们需要覆盖属性fractionCompleted , totalUnitCount和completedUnitCount 。 Progress是在内部使用键值观察。 使用willChange和didChange可增加与willChange等UI元素的UIProgressView 。 /// Removes the given child from the progress reporting. /// /// – Parameter child: The child to remove. func […]

Criando uma Pokedex com Swift零件:2/3

消费JSON Recapitulando单方前。 无需安装CocoaPods,也可以使用API​​ Alamofire,也可以使用Xcode。 Criando uma Pokedex com Swift零件:1/3 Instalando o CocoaPods medium.com Hoje vamoscomeçaruma nova et et na nasóriadessa Pokedex maravilhosa que estamos criando。 Vamos colocar asmãosnocódigo,使用Alamofire(finalmente),使用JSON,使用criar解析tambémum模型,使用vamos utilizar na terceira eúltimaparte做教程。 您可以通过以下命令来完成全部任务。 Miciano / Pokedex 通过在GitHub上创建一个帐户为Pokedex开发做出贡献。 github.com De onde vamos buscar作为信息吗? Vamos使用RESTful 2版本的RESTful API,该信息可用于Atulizadas pela Bulbapedia。 RESTful API和pokeapi。 pokéapi–神奇宝贝RESTful API Pokeapi Pokemon RESTful API […]