Tag: App Development

iOS XCode简介

一直想构建一个应用程序吗? 不知道怎么办 我也不是,直到我参加了一些在线课程,发现它并不难(构建一个简单的应用程序)。 您也可以遵循本指南并熟悉XCode。 我目前是Flatiron School的沉浸式Web开发计划的学生,并且在周日通过Udemy在App Brewery学习Swift,所以我非常了解学习开发方法会令人生畏。 在这篇文章中,将没有任何编码。 我们将着重于让您设置并熟悉众多XCode面板。 在此处安装最新版本的XCode。 您至少需要第二至最新的macOS版本才能使用最新版本的XCode。 如有必要,请在此处更新Mac。 在macOS Mojave上运行的XCode 10演示了以下步骤。 根据界面的长短,界面可能会完全相同,也可能不同。 对于“组织名称”,您可以输入您的名字。 对于“组织标识符”,Apple要求使用反向域标识符。 那就是“ com”。 就像我们以前所看到的那样,在前面而不是结尾。 您想选择Swift是因为C ++正在逐步淘汰用于iOS开发。 我们不会针对此应用进行任何测试,因此请取消选中所有复选框。 以“ .swift”结尾的文件是您的代码文件。 以“ .storyboard”结尾的文件是您的设计文件。 “ Assets.xcassets”文件夹包含您的所有媒体文件。 您可以更改预览中显示的设备,这会直接影响您构建的应用程序的尺寸。 我将其从iPhone 8更改为iPhone XR,但是您可以选择任何设备,并且仍然可以正常使用。 让我们关闭视图面板,因为您想给自己尽可能多的工作空间。 选择最吸引您的字体。 如果看不到整个设备,请稍微缩小一点。 更新标签。 重新打开视图面板。 选择您的背景色。 我在Apple的预设颜色选择中使用了彩色铅笔选项,但是您可以通过所需的任何方法选择任何颜色。 花一分钟时间单击一下,然后使用颜色面板。 对于不同的设备,您将需要不同大小的同一图像,但是有一个很棒的网站appicon.co可以为您调整图像大小。 输入图像名称以找到图像。 在视图面板中,将图像拖动到标签上方,使其在标签之后分层。 在预览屏幕中,将图像拖到标签所在的位置。 现在我们在您的文本后面有一个黑板,让我们将文本颜色更改为白色。 有时,您的图片默认情况下会失真(在这种情况下不会),您可以通过“内容模式”属性更改图片的行为。 当您想要图像或标签的特定位置(由客户或设计团队提供)时,可以使用标尺面板输入所需的位置。 我知道您想要从0到100,但这就是这篇文章。 花一些时间来熟悉我们经历的所有面板。 有很多面板可供查看和记住,但是…… 恭喜您迈出了成为iOS开发人员的第一步!

圆形视图布局–丹尼斯·沃尔什–中

我的一个朋友要我帮助她在她正在重写并升级到Swift的现有应用程序上学习自动布局,并添加一些新功能。 该应用程序是夏威夷瓦胡岛上使用的一种教育工具,旨在帮助孩子们对学习环境产生兴趣。 我们准备更新Storyboard中的许多现有视图控制器,添加UIStackViews并设置约束。 大部分设置都非常简单,我们只需要确保针对新的较大手机尺寸正确更新了按钮,图像和文本视图即可。 该应用程序的主要重点之一是在Hèeia池塘周围,其中包含传感器信息,该应用程序可以显示该信息以向孩子们显示池塘中任何给定时刻的情况。 这是设计的新功能,其想法是在池塘周围有一系列按钮,以指示位于池塘中的传感器。 基本上,我们需要将按钮排列成半圆形,以近似池塘的边缘。 我最初的想法是使用贝塞尔曲线路径在池塘周围创建弧线,然后沿弧线放置视图。 不幸的是,没有一种简单的方法可以访问组成UIBezierPath的点。 关于Stackoverflow有一个答案,但这似乎比我需要的要复杂(但可以肯定地说更准确)。 相反,我选择对高中几何和三角学课进行噩梦般的回忆。 我先要说的是,高中时代对我来说早已不存在,而几何学就我所能达到的程度而言,我做得并不好。 可以说,正是这堂课让我不喜欢数学。 即使我的计算机科学学位三角学需要所有数学运算,也从来没有真正提出太多。 问题似乎比实际上要难得多,实际上是一旦您将注意力放在数学上。 我们都(希望地)记住一个直角三角形的勾股定理:a²+b²=c²。 这与我的旧克星正弦和余弦一起变得非常方便。 如果您有兴趣,可以在这里查看数学,我将跳过它,仅声明如果您有一个圆的半径和一个角度(通常由ThetaΘ表示),则可以使用余弦(Θ)函数和使用正弦(Θ)函数的y坐标。 这给了我们一个简单的公式,可以找到圆上给定点的一对(x,y)坐标。 x坐标=半径*余弦(Θ) y坐标=半径*正弦(Θ) 我想对视图应在屏幕上出现的位置进行可视化参考,因此我使用UIBezierPath创建了一个圆,池塘的左边缘大致充当了圆的中心。 由于自然不喜欢做完美的圆,因此我们的位置将是一个近似值。 我们使用贝塞尔曲线路径绘制对齐圆,并将圆与池塘近似中心的偏移量居中。 这为我们提供了一个很好的参照视图。 接下来,我们使用一个简单的循环对视图进行布局,以计算每个视图沿假想圆放置时Theta(角度)的变化。 由于总共有9个视图和一个半圆(2π是一个完整的圆),我们将π/ 9除以得到每个视图的角度。 我们将180 °除以9,得到的角度增量为20 ° (20 ° ,40 ° ,60 °等)。 我们将初始视图的中心点设置为大约池塘的顶部,并通过增加每个视图的Theta 值并使用余弦和正弦函数更新初始点的(x,y)坐标,将其余视图沿圆以均匀间隔沿圆放置。新Theta作为输入。 这给我们一个很好的平滑的圆形排列。 您可以从代码库布局图像中看到,我们可以很好地近似池塘的外部边缘(足够靠近政府工作),并且使用基于代码的布局,视图将针对不同尺寸的设备(不包括设备旋转)正确调整。 唯一需要注意的是要记住,如果使用自动布局,则直到调用viewDidLayoutSubviews之后才设置基本视图的边界(在这种情况下为背景图像)。 因此,我们不想在viewDidLoad调用我们的方法,而是在viewDidLayoutSubviews调用,否则我们的数学计算将被关闭(基于Storyboard中视图的大小,它们的计算将不正确)。 我们的最终布局为池塘提供了一个近似的外观,并以对称的图案布置了优美的景色。 资源 单位圆—数学很有趣 单位圆—三角函数与几何定义 沿贝塞尔曲线路径放置图像 是否可以在路径周长上对齐视图?

UIKIT APP的基础知识(MVC和MVVM)

这适用于iOS App开发的初学者或各个阶段的所有开发人员,他们真的想回顾一下基础知识。 如今,所有iOS开发人员都在努力将其应用程序设计转变为MVVM设计模式,但是所有开发人员都知道为什么这样做吗? 还是您中的一员,谁正在更改模式,因为您的高级开发人员想要更改。 我会解释“ 为什么 ”,不用担心don 首先,我想让您知道UIKIT应用程序基于MVC(模型-视图-控制器)设计模式。 模型 –就像是您的应用程序的宝贵资源,就像您想要在应用程序上显示的数据,其应用程序的数据以及业务逻辑一样,可以帮助将数据修改为应用程序中更具表现力的方式。 视图 –主要处理用户界面,它是数据的可视界面。 控制器 –就像模型和视图之间的桥梁一样,它在适当的时候从模型和视图之间移动数据,反之亦然。 请查看下面由Apple提供的有关MVC设计模式如何工作的图像。 在了解了MVC的知识之后,让我们开始MVVM。 我将以最简单的方式来描述MVVM,MVVM只是MODEL-VIEW-VIEWMODEL。 在这种情况下, Viewmodel充当View和Model之间的桥梁。 在大多数情况下,业务逻辑也从Model插入,并在ViewModel中完成。 其次,在这种情况下, View仅用于发布内容,它仅显示分配给它及其子视图的内容,应显示的内容以及应如何显示的内容再次由ViewModel处理。 看起来ViewModel是此设计模式中的主角。 那么,为什么许多iOS开发人员更喜欢MVVM而不是UIKIT的MVC? 当涉及到Xcode Project时,当您尝试在UIKIT APP中创建ViewController时,将以如下所示的形式创建它: 您可以看到Controller是用自己的View创建的,它们就像密不可分,因此,如果您要对Controller进行单元测试,它实际上涉及View,那么模拟ViewController非常困难,并且您需要做很多事情不知道ViewController会发生这种情况,而我们实际上没有任何控制权。 最后,您实际上没有机会独立测试实际的业务逻辑。 在MVVM设计模式中,您实际上可以独立地测试业务逻辑,可以将业务逻辑与模型分离,可以分离数据的转换方式,以便在View中显示,并且模拟ViewModel真的很容易。 如何将给定的UIKIT的MVC设计转换为MVVM,请查看以下图像: 至 因此,为了将MVC更改为MVVM,您需要一个额外的文件,例如:ViewModel.swift并将所有逻辑拉入其中,只是将整个ViewController视为MVVM。 因此,在这里,ViewController的部分是发布或显示数据和视图。 如果ViewController(在MVVM中为视图)要发布某些内容,则它应该来自ViewModel,后者再处理来自Model的数据以将其提供给ViewController。 如果用户想要更新其数据,则用户将更新屏幕上的数据,并将该信息发送到ViewModel,后者将更新模型。 那是最终读者,希望大家喜欢这篇文章。 如果您有任何疑问或想念任何内容,请在💁下方评论。 朱丽叶编码器签字……

如何在iOS中生成QR码

生成QR码可能是一个小问题,但知道如何在手机上生成QR码而不是仅使用手机的摄像头扫描QR码就很好了,并且生成它们非常容易。 让我们看一个简单的示例,在该示例中,我们基于字符串创建QR代码,此外,我们还将通过向其添加一些颜色来对其进行一些自定义。 首先,让我们创建UIView的子类,以便我们能够轻松地将QR代码放置在应用程序中所需的位置。 因此,这是我们为实现此结果所做的工作。 为了纠正图像模糊的问题,我们应用了一个变换滤镜,并将缩放比例提高了十倍。 您可能想修改一下它而不牺牲任何性能,使用10的比例随机说明该方法的工作原理。 要设置所需的颜色值,我们需要反转颜色,然后对图像进行遮罩,以使背景变得透明。 对于反转,我们使用另一个名为CIColorInvert的CIFilter 。 这只是反转了由CIQRCodeGenerator生成的黑色和白色的颜色。 该过滤器的输入是转换后的图像,我们使用键kCIInputImageKey ,在进行遮罩时也会看到该键被使用。 现在我们有了一个反转的图像,是时候应用遮罩了。 对于屏蔽,我们使用名为CIMaskToAlpha的过滤器。 就像反转过滤器一样,它也使用相同的键kCIInputImageKey将图像作为输入。 现在,我们完成了一个过滤器。 现在是时候将这些碎片放到位了。 首先,我们为图像视图设置色调颜色,这将是实际代码的颜色。 我们继续为实际的图像视图设置背景色; 当我们对图像应用Alpha滤镜时,这将作为代码的背景色。 最后一点,是时候将生成的图像设置为图像视图了。 因为我们正在使用Core Image框架,所以我们还没有UIImage。 对我们来说幸运的是,UIImage作为接受CIImage的初始化程序。 锦上添花的是,当您将UIImage设置为UIImageView时,可以通过添加.withRenderingMode(.alwaysTemplate) 。 最后一步很重要,因为它将使图像采用图像视图的色调。 就在那里 现在,您可以生成自己的QR码并通过在其上划线颜色方案来对其进行个性化设置。

在App Deeplink导航系统中

一开始的需求是这样的。我们希望可以通过某种方式,让用户可以在打开app的时候,直接,空降,跳到某个特定页面上,这特定页面可能是某篇文章,潜水日志,或某张照片,某则留言,然后还要照指定路径上一层退回上一页。所以Deeplink就被提出来,希望可以实现。 参考维基百科。简单说就是,利用一套预先定义好的URI路径,使用户可以恢复重定向到应用内部的特定页面/特定功能,甚至可以重新打开。 用例 投放到应用内的特定文章,特定商品等等指定内容 做新功能的介绍或展示 根据通知逐步到特定位置 你可以做… 在每一个需要重定向的页面处理。在某个地方解析URL转为参数,但在各别页面上处理下一级的替换。 最好的优点应该是直观,当每页的下一级都是有限范围的情况下,或许也很快可以实作完成。但是如果若要重新设置规格会随整个app功能增加,持续不断长大的时候,就有机会让复杂度与修改幅度倍数增长。 而若在每一页处理下一级的话,必须先把本页生出来,表示没处理好的时候用户会看到一页一页的转场跳进去。那么有点不是我想要的样子了。 当我要做的时候 当时,我们除了需要开发深层链接系统之外,原本有一套实作了一半的通知系统,共有8x个不同的通知类型。各有不同的通知消息。整并过后大约可减为2x种替换组合。既然deeplink与notification都需要进行类似的页面重定向,所以就决定,先将notification转换为deeplink,再用转出来的deeplink进行替换,即可使用一套代码处理所有替代行为。 实作DeeplinkHandler,将收到的link解析为路径与参数。 实作ViewControllerFactory,以参数初始化各ViewController而不使用data。 根据解析得到的路径将各个ViewController实体化,组出ViewStack。 在进行引导时,使用UINavigationController setViewControllers将ViewStack推上画面 回头将通知与有效载荷按照规格转换为deeplink格式 在主要行为完成之后,有几个地方可能需要额外处理: 合法的深层链接:当然我们不会希望随便收到什么链接进来通通都拿去去处理,结果不小心踩到坑就崩溃了。我们可以把路径跟参数key定为枚举,在解析时以字符串型别转换做简单的判别。也可以使用特定的schema与主机名作检查。 要求登录:也许有人某个特定页面需要用户登录才能显示内容。我们可以把对应的几个路径存入数组,在组成ViewStack之前,预先检查是否需要登录。 路径之间有相依性:如某个路径代表前一页的特定功能而非独立存在。则可设计简单的状态机,在解析时预做处理 在统整出这一套系统后,往后需要再加入新的页面,也非常容易。开发者只需要注意, 不要将整包资料从前一级画面带入。减少了画面间的相依性,各画面可独立被实体化,就很容易可以加入这个系统。 不需要为了加入deeplink支持,而修改一些很久没有更动的画面。 由于路径之间的关联被解构,甚至可以支持组出超越spec规范,10个重定向页面以上的deeplink,都可以正确克服无阻碍。 终极的嫌疑麻烦,是不怕麻烦。 如果你有个记性还不错的老板,常常喜欢说, 我们不是之前有做过一个什么系统,那现在可不可以拿来套用,这样做起来应该很快吧。 建议您在做新功能的时候,最好可以先考虑一下这个功能有没有可能在未来继续被放大利用。在时间允许的范围内,进行调整向未来兼容的框架或系统,这样才有机会越写越轻松。

iOS中的FontAwesome按钮

FontAwesome是用于网页设计的非常有用的工具,我们广泛使用它来避免需要定期设计图标的情况。 因此,它是网络上linkalist的关键部分,我们为FontAwesome图标样式提供了广泛的支持。 因此,既然我们正在使用iOS SDK,我们对图形资产的需求也非常相似,因为我们需要将图像放入系统中,以三种不同的尺寸缩放然后将其添加到应用程序中,因此构建起来非常繁琐。 。 然后,如果需要更改按钮的大小,我们将再次进行整个操作。 它的直接驱动程序是图像选择控件,因此我们可以添加相机和库按钮。 因此,今天早上,我决定浪费足够的时间来解决这个问题,并决定了解设计FontAwesome按钮的方法。 与iOS中的大多数事情一样,事实证明这比必要的要复杂一些。 首先,我必须从http://www.fontawesome.com下载该软件包。 我已经使用了5.6.3版本,但是任何版本都应该同样适用。 安装与注册 我将所有三个ttf文件放在下载包的webfonts目录中,并将它们安装到我的系统上。 然后,我将三个ttf文件添加到我的应用程序资源中。 下一步是注册字体。 应该有一种使用info.plist文件执行此操作的方法,但这有点不可靠,我发现在代码中执行此操作更为简单。 扩展 UIFont { 类func loadAllFonts(){ 让 bundleID =“ io.linkalist.linkalistSDK” registerFont(“ fa-regular-400.ttf”,bundleID:bundleID) registerFont(“ fa-solid-900.ttf”,bundleID:bundleID) registerFont(“ fa-brands-400.ttf”,bundleID:bundleID) } 静态函数 registerFont(_ fileName:String,bundleID:String){ 如果让 frameworkBundle = Bundle(identifier:bundleID){ 让 pathForResourceString = frameworkBundle.path(forResource:fileName,ofType: nil ) 让 fontData = NSData(contentsOfFile:pathForResourceString!) 让 dataProvider = CGDataProvider(data:fontData!) 让 fontRef […]

推送通知—第二部分:Implementando Xamarion.iOS

Este教程和实现通知的连续性。 在iOS上无所事事的教程,以及Firebase的通知通​​知。 Entsãvamos iniciar o passo a passo da nossaaplicação。 Passso 1:Iremos criar um projeto Xamarin.iOS,或您好,HelloFirebaseIOS,como identificifica na figura abaixo: Agoravocêdeve selecionar等同于aplicativoiráfuncionar的版本。 Neste教程iremos defini-la como 9。 七彩凤仙花(Estrutura criada deve ser semelhante) Passo 2:Agora可以管理Xamarin.Firebase.iOS.CloudMessaging。 可以为完成结业而创建的全书,请参考estarádisponível,因为没有任何项目的图书馆。 Passo 3:Atenção,或在criamos上没有教程passadoseráutilizado neste passo。 链接。 在iOS上下载或下载Firebase版本,请下载GoogleService-Info.plist参数。 Adicione este arquivo a raiz do projeto em seguida clique com obotãoesquerdo no arquivo e […]

学习Swift:我是否过于乐观?

我一直在盯着我在免费在线指南的帮助下开发的相机应用程序的非常基本的布局。 没什么特别的,实际上这很糟糕,但这只是一个开始。 但是,我想知道我对Swift的学习能力是否过于乐观……我应该从更简单的事情开始吗? 简化我的方法? 构建Instagram副本时听起来很有趣。 对于初次使用编码器的人来说,挑战可能太大了。 我认为我应该想出一个简单的应用程序构想,以学习功能工作原理以及Xcode布局的一些基础知识。 我一直在研究Apple的“学习编码”电子书,这对我很有帮助,但它也使我真正了解到要学习多少信息。 学习所有内容都不是问题,但是正如前几天我告诉妻子的那样,我目前正在了解婴儿的水平。 我可以发出声音,也许其中一些声音可能会误认为单词。 但是,我还不能真正进行交流,我当然不能将单词串连接在一起以创建句子或讲故事。 应用程序构建是一个学习过程,我需要一次走一小步,我认为最好的方法是退后一步,尝试创建一个更简单的应用程序并以此为基础进行构建。 因此,因此……我本周的任务是使用Swift创建一个简单的应用程序。 明天,我将有更多关于此应用程序的功能以及如何使其正常运行的信息。 在此之前-保持推荐,关注和分享。 您的支持将帮助我继续前进! -J

玩今天的窗口小部件扩展第一部分

首先; “乐趣”在这里是主观的! 对我来说,什么是“乐趣”( 不 使用情节提要 本机进行iOS原生开发 …… ),对其 他人而言 可能是无聊的(或…… 折磨 ?)。 * Kanye耸了耸肩* ……实际上……现在或以后再也没有提及Kanye了。 免责声明 :本文假定您熟悉:使用 Swift 本机开发iOS应用程序 。 各种iOS框架,API和组件……或至少是; 安装了 XCode 。 与往常一样,您甚至没有义务阅读此书,您可能只想要源代码,就 在这里 。 因此,您可能想知道“ Today Widget到底是什么?” 简短答案:“今日视图”中的应用扩展程序,可让用户快速访问信息。 不确定那是什么意思? 好吧, 这是一个很长的答案 。 让我们通过创建一个新的XCode项目来开始。 接下来,添加应用程序扩展 时间到一些代码 现在,这是我完全删除所有情节提要的部分。 main和launchscreen(您不必完全删除它们,但是我不会使用它们),而是将AppDelegate配置为手动启动默认的ViewController 。 现在,您的项目应该在主应用程序和Widget扩展之间显示清楚的区别。 从现在开始,您基本上将专注于Widget扩展名称空间。 创建一个名为UserModel的快捷文件,此模型对象将具有一个名为’name’的字符串变量。 进口基金会 struct UserModel { 命名:字符串 } 创建一个新的Cocoa Touch Class,将其设置为UICollectionViewCell ,并将其命名为UserCell。 这将是自定义的collectionview单元格,其中将容纳将在小部件上看到的必要视图( […]

为NSView设置背景色

macOS(以前称为OS X)开发一直是我的一个充满激情的项目。 首先就是要进入应用程序开发。 我从未真正想为iPhone制作应用程序,我想为macOS设计出色的应用程序,从而帮助了我。 就我而言,不幸的是,据我所知,奥斯陆的macOS开发人员市场并不存在。 不要误会我的意思,我非常喜欢为iPhone,iPad和AppleTV制作应用程序,但是我从未忘记自己的根源以及一切的开始方式。 我一直试图使其通过爱好项目,并在可行的情况下为我贡献的所有框架添加支持macOS。 您可能想知道当谣言指向Apple统一API时使我花时间的原因,从而使macOS更类似于iOS / tvOS的对应部分。 好吧,我们还没有活在那个未来,我很享受。 就这么简单。 在经过较长的iOS / tvOS开发后回到macOS之后,我可以看到它是如何“变质”的。移动开发人员很方便。 iOS起源于macOS,但是Apple做出了巨大的贡献,为我们的开发人员简化了日常操作。 因为我感觉到macOS的开发正逐渐成为一种迷失的艺术形式,所以我将开始分享一些技巧,窍门和说明,这些内容是我为Mac编程时偶然发现的。 我们将从简单的内容开始,将背景色设置为常规视图。 即使这对于许多人来说似乎很明显,但对于某些人来说可能并不是那么简单,尤其是如果您已经被便利所困扰。 首先,让我们看一下这是如何在iOS和tvOS上完成的。 这是非常简单的方法,我们创建带有框架的UIView并使用UIColor设置背景色。 因此,让我们为macOS做等效的事情。 创建视图是“相同但不同”,而不是UIView而是创建NSView ,但是您可能已经知道这一点。 因此,让我们进一步看一下这两个视图的偏离位置。 UIView是用于设置背景颜色的属性,而NSView缺少一种。 相反,您必须在视图层上设置背景色。 为了使事情更不方便,默认情况下, NSView没有附加图层。 要获得一个,必须将wantLayer设置为true 。 这将创建一个图层并将其分配给视图上的可选layer属性。 这将使您的视图层化。 最后但并非最不重要的一点是,因为我们将背景色设置为图层,所以我们不能直接使用NSColor而是必须使用CGColor ,这当然很容易做到,但与iOS相比却不是那么方便。 那么,为什么NSView上的layer是可选的,文档有助于对此有所了解: 将此属性的值设置为true会将视图转换为层支持的视图-即,该视图使用CALayer对象管理其呈现的内容。 创建隐含层的视图会隐式地导致该视图下的整个视图层次结构成为隐层的。 因此,该视图及其所有子视图(包括子视图的子视图)将成为层支持的。 此属性的默认值为false。 https://developer.apple.com/documentation/appkit/nsview/1483695-wantslayer 就是这样,这就是我们为NSView设置背景色的方式。 我的目标是分享更多的琐碎和非琐碎的任务,力求使它简短而有趣。