Xcode,Swift和Cocoa,这些很棒的东西,在构建iOS应用程序时会让您微笑。 但是,对于情节提要和AutoLayout,我认为这不是事实。 自动布局是我见过的最不可靠的东西。 不用担心,iOS社区已经构建了出色的开源工具来帮助我们继续构建出色的应用程序,而无需关心AutoLayout,Segues和Storyboard管理。 在本文中,我将向您展示如何在不使用任何故事板或定义自动布局约束的情况下构建应用程序。 代替这些,我将向您展示如何使用PureLayout配置视图控制器,并摆脱项目中的所有情节提要。 1.获取PureLayout 这是PureLayout的Github官方页面 PureLayout / PureLayout PureLayout – iOS和OS X Auto Layout的终极API –极其简单,功能强大。 Objective-C和… github.com 我建议您在实现库时始终使用CocoaPods,因为这会使您的生活更轻松🙂 2.删除情节提要 首先删除您的Main.storyboard,使所有内容保持干净。 转到项目目标,然后清除“主界面”字段。 3.编辑您的AppDelegate 打开您的AppDelegate文件,然后在应用程序didFinishLaunchingWithOptions内部配置启动屏幕 func application(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)->布尔{ 让窗口= UIWindow(框架:UIScreen.main.bounds) window.backgroundColor = UIColor.white 让vc = CustomViewController() window.rootViewController = vc window.makeKeyAndVisible() self.window =窗口 返回真 } 在此示例中,我将启动视图控制器配置为CustomViewController,将在下一步中创建它。 4.创建一个新的View Controller并导入PureLayout 创建一个名称为CustomViewController的视图控制器,让我们开始配置PureLayout参数。 首先导入PureLayout,这样您就可以访问它的漂亮功能。 导入PureLayout 5.将UI元素放在视图上。 使用PureLayout时,请确保将“ didSetupConstraints”变量放置在视图控制器中,并将其设置为“ […]
在Twitter上关注我: @ kiranjasvanee 依赖项注入对于一个简单的概念来说是个大词,该概念是允许对象接收其所需的依赖项。 让我们先用一个不好的例子来说明这一点,然后再使用依赖注入来查看使用它可以获得的所有好处,改进和安全性。 假设您正在构建一个用于创建专辑并在其中添加歌曲的应用程序。 首先创建相册模型。 类相册{ private var albumName:字符串! func getAlbumName()->字符串{ 返回专辑名称 } } 让我们尝试在您的ViewController之一中获取albumName 类ViewController:UIViewController { 覆盖func viewDidLoad(){ super.viewDidLoad() 让albumInstance = Album() print(“相册名称:\(albumInstance.getAlbumName())”) } } 现在,您在这里崩溃了您的应用程序。 您正在尝试使用getAlbumName()来获取albumName ,但albumName设置albumName 。 在这里, albumName是您必须注入的依赖项,当然,没有专辑名称时,您将如何发行或添加歌曲。 让我们通过注入依赖关系来解决此问题。 类相册{ private var albumName:字符串! init(albumName:String){ self.albumName = albumName } func getAlbumName()->字符串{ 返回专辑名称 } } 现在,使用我们的新init函数设置albumName的值。 let albumInstance = Album(albumName:“信誉”) print(“相册名称:\(albumInstance.getAlbumName())”) […]
在本教程中,学习如何为iOS 10创建分段控件 。 分段控件允许用户在每次按下按钮时更改其应用程序中的内容。 在本教程中,我们将创建一个基本的分段控件,以在每次按下按钮时更改标签的文本。 让我们开始吧 首先,打开Xcode并单击Create a new Xcode project 。 然后,在iOS标签下选择“ 单一视图应用程序 ”。 单击下一步 。 然后,在“ 产品名称”字段中,输入SegmentedControl 。 在“ 组织名称”和“ 组织标识符”字段中,键入所需的任何名称。 确保在“ 语言 ”下选择“ Swift” ,在“ 设备”中选择“ iPhone” 。 保留Use CoreData并取消选中两个测试。 然后,单击“ 下一步”并将其保存到所需的位置。 保存文件后,在Project Navigator上转到Main.storyboard文件。 然后在对象库中搜索分段控件 ,并将其拖动到视图控制器的顶部。 接下来,在对象库中,拖动标签并将其放置在新的分段控件的正下方。 选择您的标签,然后单击右上角名为“ 显示属性检查器”的第四个图标。 命名您的Label One ,这将是分段控件第一个按钮的起始值。 您可以将字体增加到24,以便更好地显示标签 。 在“ 对齐”区域中单击“ 居中 ”。 添加约束 选择您的分段控件,然后在右下方的“ 自动布局约束”图标所在的位置,单击“ 添加新约束” […]
从今天开始,我们将讨论专注于对象之间通信的行为模式。 它包括命令,中介,观察者,状态,策略等。 在本文中,我们将介绍命令模式。 就像在现实世界中一样,命令是从其调用者(即调用者)发送到接收者的请求。 通过隔离和封装请求,此模式将调用方和接收方分开,如下图所示。 从命令模式— Wikipedia 那它给我们带来什么好处呢? 让我们从车上的故事开始吧。 protocol Car { func move () } class Sedan : Car { func move () { print (“Sedan is moving.”) } } class SUV : Car { func move () { print (“SUV is moving.”) } } 现在,您作为iOS应用开发者,拥有一辆轿车并每天开车。 class Developer { let sedan = Sedan () […]
因此,我进入iOS程序至少有四个月了,做实验,尝试通过测试,等等。我记得回想起来,而我想做的只是通过实验,他们会为我们提供服务,即使实际上没有最后期限,也要快速前进。 我在执行此程序时一直在做的问题是,我没有掌握这些实验室的主题概念,而只是试图让它们通过。 我的实验室会通过,但真的在我的脑海中,我不明白他们为什么会通过,或者我真正做了什么。 一旦我进入了一个项目,而这个项目几乎完全由您自己决定,我意识到是的,实验室是有价值的,但是随着项目变得越来越复杂,您也会学得更多。 我小组研究的项目是星座应用程序,您可以根据从我们发现的API输入的生日来获取每日星座运势。 我意识到,我们的项目需要iOS程序教给我们的许多重要内容,最终将它们整合在一起以创建我们的App。 我们的星座应用程序包含程序约束,核心数据,动画,API调用,堆栈视图,可可豆荚等。 当我做这些单独的实验室时,我从来没有想过自己会像我们正在学习的所有这些主题如何被整合到一起。 我不仅自学了应用程序所需的内容,而且还理解了为什么我们需要在程序中学习这些内容以及它们之间如何相互联系。 当我们小组正在处理我们的项目时,我们会互相大声说:“ 嘿,我们需要合并Core Data来保存用户的生日 ”和“ 我们还需要将此特定的API调用放入NSOperation.mainqueue中 ” ,我认为这很棒,因为我终于了解了与我们学习的所有主题的联系。 我还意识到,您可以找到自己的编码样式,而不是遵循实验室的指示并尝试编写编码来满足测试要求。 在项目模式下,您需要编写大量代码并尝试使其正常运行。 同样在项目中,当您的项目变大时,名称约定非常重要,我记得在做我们的星座应用程序时,我忘记了自己的功能(我在其中创建的功能)做了什么,因为我不好地命名了该特定功能,因此我也来了认识到您的代码不仅必须正确工作,而且不仅对他人而且对您自己也都可以理解您的代码。 起初,我对处于项目模式感到非常怀疑,因为我认为我无法在项目中做出很大的贡献,但是我学会了对我们需要的东西进行研究,这是我非常努力地学习的,并且了解了主题并了解了它们。 我为我的团队非常优雅,因为我们很棒! =],我们学习了如何共同制作一个应用。 当我们的应用程序最终完成时,我将在下面放置链接。 编辑:9/28/2015 —占星术终于在App Store中了!!!! https://itunes.apple.com/us/app/id1146310854
以前,我们了解了代码结构,可读性和其他一些原理。 Swift编程入门第10部分-代码结构,可读性和原理 在上一篇文章中,我们介绍了基本协议,扩展和下标。 medium.com 是的,它不是技术性很强的工具,但是如果您一直在磨练自己的技能,那么您的项目就会变得相当庞大,并且您可能已经开始考虑可以使代码井井有条的方式。 项目之间的代码结构各不相同,因为在开始首次工作编程之前,开发人员很少谈论如何布局代码。 即使那样,它大部分时间还是安静的,只是希望您能赶上。 如果您尝试自己编写应用程序,则这样做的效果不太好。 当我们讨论了可读性时,我几乎不讨论任何事情,但是我为您提供了基础知识,因此当您回到代码中时,就不会迷失方向。 我可以只写一篇关于代码结构或可读性的整篇文章,但是为了使事情快速发展,我略过了。 如果您想了解有关结构或可读性的更多信息,请告诉我,本系列结束后,我将计划一些深入的文章。 最后,我们介绍了一些原则以为您提供指导,以及更多有关我为何以这种方式编写代码的上下文。 让我们开始吧。 Grand Central Dispatch是Apple处理称为调度队列的方法。 队列有三种类型: 串行 -按接收顺序执行发送到队列的工作,先入先出(FIFO)。 这些也称为专用调度队列。 并发 – 同时执行发送到队列的工作。 每个任务的启动顺序与将它们添加到队列的顺序相同。 串行队列和并发队列之间的主要区别在于,在串行队列中,下一个任务要等到第一个任务结束后才开始。在并发队列中,下一个任务可能不需要与第一个任务一样多的时间来完成,并且可能在第一个任务之前完成第一个任务完成。 在决定使用哪个队列时,请记住这一点。 这些也称为全局调度队列。 主调度队列 -这是应用程序的主线程,或应用程序所在的位置。 当您将代码放入View Controller的viewDidLoad()时,这就是所有工作的队列。 我将暂时脱离所有这些,以使您了解这些队列与硬件的关系。 在这里,我提供了排队时任务的快照。 在继续之前,我想先介绍几个定义。 运行循环-您的程序只有在告诉您时才停止,而在运行时,它会在while循环下运行,直到结束。 有时它需要处理事物,而其他时候,它只是简单地通过循环而没有任何变化。 线程-简单地说,这些是您的单独任务,如果您的任务需要另一个任务来完成其自己的过程,它将在另一个线程中处理该任务。 (不要与CPU Core混淆) CPU —计算机的大脑,这是使用一个或多个内核执行计算的设备。 核心-核心是处理器的物理或逻辑部分,可读取您的代码并返回结果。 每个核心都有许多硬件线程,可用于执行在其上发送的任务。 CPU Clock Speed(CPU时钟速度)—处理器读取1s和0s(二进制)的速度。 如果您曾经想过1 GHz意味着什么,Giga意味着十亿,那么1 GHz意味着处理器的每个内核每秒可以读取10亿个1或0。 我的开发计算机的处理器速度为2.8 GHz,具有8个内核。 这意味着它可以在其基本时钟速度下每秒处理2.8 * 8 = […]
如何显示比萤幕大的内容: 将UIScroll View加入画面,自动布局四边创建0 加入图片视图,自动布局上与左添加0,宽度与高度设置图片大小。 将scrollView连结到程式码,数字为显示内容的长宽。 放大缩小图片功能: scrollView上按快捷键,把委托连结到ViewController。 将图片连结到程式码,命名为image 输入以下程式码 5.用实体机build就可以了,如果用模拟器可以用键盘的可选模拟两根手指放大缩小。 如何使用UIPageControl切换页面 把UI View Controller删掉,加入Page View Controller 加入View Controller,更改颜色后在标识名称:FirstVC,SecondVC…
🎉终于发布了CocoaPod! 看这里。 这是一个简单的iOS项目,演示了如何以编程方式实现可折叠表格部分,即没有主故事板,没有XIB,无需注册笔尖,仅是Swift 3! 在此项目中,表格视图会自动调整行的高度以适合每个单元格中的内容,并且自定义单元格也以编程方式实现。 可以在我的Github上找到源代码。 如何实现可折叠表格部分? 步骤1.准备数据 假设我们将以下数据分为不同的部分,每个部分都是一个Section对象: crashed表示当前节是否折叠,默认为false 。 步骤2.设置TableView以支持自动调整大小 步骤3.节标题 根据Apple API参考,我们应该使用UITableViewHeaderFooterView 。 让我们对其进行子类化并实现节头CollapsibleTableViewHeader : 当用户点击标题时,我们需要折叠或展开该部分,为此,我们借用UITapGestureRecognizer 。 另外,我们需要将此事件委托给表视图以更新折叠的属性。 由于我们没有使用任何情节提要或XIB,如何以编程方式自动布局? 答案是NSLayoutConstraint的ConstraintsWithVisualFormat函数。 步骤4. UITableView数据源和委托 段数为sections.count : 并且每个部分中的行数为: 注意,我们不需要为折叠部分渲染任何单元格,如果该部分中有很多单元格,则可以大大提高性能。 接下来,我们使用tableView的viewForHeaderInSection函数来连接我们的自定义标头: 普通的行单元格非常简单: 在上面的代码中,我们使用普通的UITableViewCell ,如果您想了解如何制作自动调整大小的单元格,请查看源代码中的CollapsibleTableViewCell 。 CollapsibleTableViewCell是UITableViewCell的子类,它添加了名称和详细信息标签,最重要的是它支持自动调整大小功能,关键是正确设置自动布局约束,确保将子视图适当地拉伸到顶部和底部。 contentView 。 步骤5。如何切换折叠和展开 这个想法真的很简单,如果某节的折叠属性为true ,则将该节内的行的高度设置为0 ,否则设置UITableViewAutomaticDimension ! 这是切换功能: 重新加载这些节后,将重新计算和重画该节中的单元格数。 就是这样,我们已经实现了可折叠表格部分! 请参考源代码并查看详细的实现。 执照 该项目已获得MIT许可,版权所有©2017 Yong Su。 作者: Yong Su @ Box […]
在开发时,您想提高生产力和效率,充分了解Swift是一回事,但也要了解您的IDE(集成开发环境),在我们的情况下就是Xcode。 首先,Xcode令人生畏,但是了解以下内容无疑将使您的开发过程变得更快,更容易。 Control + 6并筛选您的方法。 突出显示,然后按Control + Command + E Command + 0 使用以下命令搜索文件,类,函数和方法 Command + Shift + O 选择文本,然后按Control + I 单击带有Option + Shift文件 编程时,留下标记以提醒自己需要注意的事情,也可以轻松跳转到该地方。 // MARK: Everything is crashing 当您经常使用相同的代码时,这非常有用。 例如,我已经保存了这段代码,因此我不必完全记住语法,也不必浪费时间来键入它。 Command + / Command + [或Command + ] 还有更多快捷方式/提示/技巧,如果我错过了,请告诉我,我将其添加到🙂中。
大家好,如果您像我一样,那么您对编码世界还是一个新手。 对于那些不是那么新的人,也许这个故事会激起一些怀旧的回忆。 C4Q徽标。 去年九月(2017),我在名为Queens for Queens的组织中启动了访问代码研究金,该组织也被学生称为C4Q,现在称为Pursuit。 在那之前,我刚大学毕业,并不真正知道我的职业方向。 我从哥哥那里听说过C4Q,因此决定看看。 从表面上看,他们的任务看起来非常好并且令人鼓舞,所以我决定签约并试一试。 我经历了一个非常严格的过程,其中包括现场技术和行为面试,以及最终以“最终考试”结束的javascript讲习班,以了解我们如何很好地掌握代码。 我不会撒谎,有一段时间我非常担心自己不会加入。不是因为我不认为自己可以削减它,而是因为我真的很想进入程序。 每天,我都会焦急地检查我的电子邮件是否有响应,在经历了数次令人烦恼的神经困扰之后,我终于收到了他们的回复。 我已经被他们的iOS开发程序接受了!!! 对我来说,这是一个巨大的胜利,但是我知道,这仅仅是漫长道路的开始。 现在,我要说这是我的课程非常幸运,我们有一位很棒的教练,而ta也同样出色。 更不用说我的同龄人了,我们都是一群陌生人,但是很快就变成了一个紧密联系,非常支持家庭的家庭。 说到家庭,我的兄弟(同行业)在整个过程中都非常支持我。 艰难的爱情和一切,哈哈! 该程序从我们开始学习Swift的基础知识:let,var,字符串,int,数组,作品! 考虑到我从来没有在javascript讲习班之前真正编写过代码,我会承认这令人望而生畏。 每天都有一场学习和理解摆在我面前的代码的战斗。 几周后,我们掌握了有关基础知识的知识并开始了逻辑学,这是我做过的最难的部分之一。 仅仅把头放在如何构建和组织逻辑代码上是很困难的,但与此同时,当我开始工作时,这是非常有意义的。 跳过几周,我们即将从Swift操场毕业到实际的XCode项目! 就是这样,我们将初体验情节提要和制作应用程序,尽管相当简单,但仍然需要应用程序。 我非常激动和焦虑,但是我走了这么远,我现在并不想停下来。 我毫不犹豫地投入工作,并通过所有的成功和失败来拥抱这个过程,并相信我有很多失败。 学习成为开发人员的一部分是学习如何处理挫折和失败。 每一次挫折和失败都是一个学习的机会,如果您不学会以这种方式看待它们,学习将不可避免,并且总是会成为艰巨的战斗。 再快一点,我们的团队又选了一位超级才华的教练。 大约是在这个时候,我开始与同学一起进行小组项目。 让我告诉你,如果您认为自己学习编码和编码很困难,那么与一组开发人员一起工作是一种新的挑战,充满挑战并能自给自足。 我必须非常快速地学习如何谦逊自己,而不是占有我编写的代码。 我的一位讲师说的一句话会永远陪着我:“当您在一个小组中工作并向小组贡献代码时,代码属于该小组,这就是与小组一起工作的意义”。 我最终做到了C4Q的简称“ hackathon”。 我们都提出了应用创意,人们投票支持他们想要开发的应用。 这个过程历时3天,我们的团队不得不从头开始构建一个完整的原始应用程序。 如果我认为在常规的分配小组项目上工作很辛苦,那将是一大挑战。 直到那时,我还没有意识到我的git技能真正需要多少工作。 至少可以说,我还和一个团队一起工作,该团队功能异常严重,但最终我们都做到了。 在黑客马拉松结束时,我们所有人都将应用程序演示给了来自实际开发人员世界的评审团。 这是我第一次真正的兴趣,是在公开场合与同学以外的其他人谈论我们开发的应用程序,它的功能以及回答更有经验的开发人员的棘手问题。 阶段应用徽标。 现在,让我们跳过大约一周左右的时间,终于到了我们的顶点项目的时候了。 黑客马拉松的概念几乎相同,只是规模更大。 我们能够选择理想中的合作对象,而现在我们都对与谁合作的对象有了很好的了解,我很幸运地加入了一个没有很多自负的团队它。 作为一个小组,我们讨论了一些应用程序的想法和名称,直到我们都同意应用程序“阶段”(此处显示徽标)。 Phase是一个社交应用程序,可让用户创建称为“旅程”的相册,每个帖子均称为“阶段”。 它从头到尾着重于各个旅程的整个过程。 此外,除非他们想关注所有内容,并且与其他竞争对手相比,它可以使用户更好地组织图像内容,否则用户也不会被迫在其供稿中查看某人的所有内容。 四周后,在其中将近140个文件和将近70,000行代码的情况下,我们将在这里的PayPal / Venmo总部在更大的评委和更大的人群(超过100人)面前展示我们的应用程序在曼哈顿! 谈论一个很高的要求。 […]