Tag: iOS应用程序开发

电子商务行业中移动应用的未来趋势越来越大

生活在技术时代迫使企业家适应当前的市场和技术趋势。 移动就是推动企业发展的另一种推动力。 电子商务行业是如此之大,以至于需要一个适当的渠道或平台来扩大受众范围。 Android和iPhone都已成为全球人们广泛使用的平台。 如今,电子商务行业的消费者可以在多种环境中使用他们的移动设备,例如-随时随地进行购买,在商店购物时浏览并获取有关产品的详细信息。 移动应用程序充当连接零售商和客户之间所有渠道和接触点的桥梁,他们共同利用它们来获得出色的无缝购物体验。 让我们看一下趋势,这些趋势往往会为电子商务行业中的移动应用程序设定未来。 越来越多的移动购物者涌入 就像智能手机的使用和销售额继续上升一样,移动购物也有望增长。 移动设备目前占美国所有电子商务销售额的19%; 但是,根据Invesp的报告,这一数字预计到2018年底将上升到27%。 但是,移动购物者的涌入也给商家带来了新的挑战。 尽管台式机驱动的电子商务销售可能处于平稳状态,但是Comscore的数据显示,在线销售总体上正在蓬勃发展。 移动设备的销售现在以59%的年增长率超过台式机的17%领先。 更多流行的店面应用程序 为了应对上述吸引移动买家的挑战,希望看到一波新的移动“店面应用”浪潮能够随时随地吸引买家。 这种趋势也与商人拥有全渠道服务的需求紧密相关。 鉴于移动用户将其86%的时间都花在了与移动网站上的应用程序中,也许品牌的本机智能手机购物应用程序是转换那些曾经风行的客户的关键。 毕竟,如果客户愿意努力下载移动应用程序,那么他们很可能会忠诚并且足够信任,可以继续进行购买。 “应用程序商务”平台Poq最近发现,店面应用程序的性能比移动Web转换率高40%,比桌面Web浏览器还支持更长的浏览会话,并且吸引重复访问的可能性是后者的两倍。 考虑到店面应用程序提供的改变游戏规则的功能,这一切都是有道理的,这些功能包括出色的内容个性化机会,推送通知以及地理位置综合实体店购物推荐。 Poq的引人注目的解决方案之一是,它提供了一个集中的内容管理系统,商户和营销人员可以将其用作统一的数据中心,该中心使用API​​自动与分析平台,支付网关,客户评论平台等进行同步。 印度市场应用程序的普及 支付技术公司Worldpay发布的一份报告显示,目前在印度接受调查的买家中,超过80%的人更喜欢使用应用而非移动浏览器在手机上购物,而全球平均水平约为70%。 报告补充说,印度每天平均下载10个移动应用程序,已远远超过其竞争对手美国和英国,这是一个蓬勃发展的市场,其平均下载量为7。 去年,印度人下载了121亿个应用程序,使美国的应用程序经济(113亿美元)黯然失色。 获得正确的应用程序体验可以为电子零售商带来丰厚的回报。 毕竟,根据Worldpay的报告,三分之一的印度人在上次购物时花费了超过4,000卢比(62美元)。 开拓正确的市场将是他们成功获得电子零售商的关键。 结论 没有人能真正预测电子商务的未来。 但是,这些当前趋势将暂时继续严重影响空间。 不断发展的电子商务行业不可避免的一件事是,他们应保持最优质的应用程序并尽快上市。 最好的策略是在具有不同操作系统版本的多个真实设备上以及在基于云的平台上的不同参数上测试应用程序,从而可以更快地交付质量更好的应用程序。 pCloudy是理想的完整生命周期数字测试云平台,可测试所有移动和物联网应用。 手动,自动和人群测试都可以在iOS和Android设备上进行。 这些测试可以根据需要在公共云,本地或专用私有云上运行。 Selenium和Appium测试都可以在pCloudy上运行。 它的最大优点之一是可以与持续集成系统集成。 在pCloudy上注册并测试您的应用,以使我们相信我们所说的。 移动应用测试,移动应用测试,Android应用测试,iOS应用测试,自动化测试,应用测试,移动设备实验室,测试一个应用

iOS中的GIF终极指南。

动画内容的另一面。 GIF大约在1980年代后期。 只是在最近,它们才被虚拟吹灭。 从博客到meme网站,您可以在任何地方看到它们。 在图片上使用GIF的原因很多,例如,它们通常不像视频那样沉重,可以恰当地显示您的观点并且可以在任何地方兼容。 如果一张图片可以说一千个单词,请想象一个GIF可以有多少个。 存在对在iOS中播放GIF的本机支持,但乏味。 您需要使用Apple的ImageIO框架加载GIF的每个图像,并自定义theAnimatedImages , animationDuration和animationRepeatCount API。 Flipboard实现了一种在其应用程序内播放GIF的解决方案。 我们将使用他们的图书馆,名为 FLAnimatedImage在我们漂亮的小应用程序中复制相同内容。 按着这些次序: 安装Cocoapods。 如果尚未安装,请按照此处的步骤操作。 创建一个新的Xcode项目。 我将其命名为GIFTest。 FLAnimatedImage有一个cocoapod可用。 如果您不知道什么是Cocoapods或它如何工作,请查看此链接。 3.现在,打开终端。 将目录更改为保存iOS项目的位置。 通过键入pod init初始化我们项目的Cocoapods。 接下来,通过键入open podfile 。 我们将添加吊舱。 添加线pod ‘FLAnimatedImage’ 4.现在,我们将进行pod install以将pod install到我们的项目中。 我们将关闭Xcode的所有会话并打开GIFTest.xcworkspace项目。 那是带有白色图标的Xcode项目。 xcworkspace项目有我们的原始项目,还有一个带有pod的xcode项目。 5.太好了! 完成所有设置后,我们将三个UIImageViews添加到我们的项目中。 我们将其类更改为FLAnimatedView。 6.导入FLAnimatedImageView并为所有三个图像创建出口。 7.现在,我们将在本地加载两个GIF,并从互联网加载一个GIF。 要在本地加载GIF,请将它们移到您的项目中,然后选中“如果需要,复制项目”。 8.现在要在本地加载GIF,请按照以下步骤操作。 因此,只要提供了GIF,就将帧解压缩为位图格式(CPU密集型),并将其填充到缓存中。 编码的位图将一直保留到对象的生存期。 它试图有效地选择缓存大小,即,如果GIF太小,它将帧保留在缓存中,否则,它仅缓冲足够的帧以进行实时回放。 当系统发出内存警告时,所有帧都将丢失,并且过程将退回到按需解码。 因此,今天,我们学习了如何使用Cocoapods,如何在项目中对其进行初始化,安装了Flipboard的开源库FLAnimatedImage并将其用于显示项目内的GIF和来自互联网的GIF。 有关更多参考,请在此处查看库。 有关完整的源代码,请参阅 我的Github存储库。 如有任何问题和建议,请在下面发表评论!

SWIFT 3中的UICOLLECTIONVIEW,没有界面构建器。

集合视图类似于表视图,它们显示由自定义布局定义的单元格的集合,并且像表视图一样,它们必须符合协议才能显示数据和执行操作。 在本教程中,我们将创建一个看起来像网格的集合视图。 好吧,让我们潜入…… 让我们开始创建一个新项目,这次选择Swift。 现在,让我开始向您介绍将处理collectionView布局的类UICollectionViewFlowLayout。 创建一个新的Cocoa Touch文件并使其成为UICollectionViewFlowLayout的子类,添加此完整的实现,我将对其进行解释…… let innerSpace: CGFloat = 1.0 let numberOfCellsOnRow: CGFloat = 3 override init() { super.init() self.minimumLineSpacing = innerSpace self.minimumInteritemSpacing = innerSpace self.scrollDirection = .vertical } required init?(coder aDecoder: NSCoder) { //fatalError(“init(coder:) has not been implemented”) super.init(coder: aDecoder) } func itemWidth() -> CGFloat { return (collectionView!.frame.size.width/self.numberOfCellsOnRow)-self.innerSpace } override var itemSize: […]

iOS:如何使用可折叠部分构建表视图

第2部分。继续通过表视图采用协议和MVVM 这是我的“表视图”教程系列的第二部分,其中包含多种单元格类型。 在阅读了第一部分的多种回答和建议之后,我决定添加一些主要更新。 UITableViewController更改为UIViewController,并将TableView作为子视图。 现在,ViewModel符合TableViewDataSource协议。 NumberOfRowsInSection,cellForRowAt和numberOfSections是ViewModel的一部分。 这样可以将ViewController和ViewModel分开。 请在这里找到最终更新的项目。 感谢大家的贡献! 在第一部分中,我们创建了以下表格视图: 在本文中,我们将进行一些更改以使该部分可折叠:

如何对CoreData模型进行单元测试(Swift)

测试持久性功能对我来说是一个大麻烦。 每次我启动测试时,我的模拟器都充满了测试元素。 我的记忆上下文 基本上,您可以简单地删除测试创建的任何内容,但是有一种方法更容易。 您可以添加“ 内存持久存储” 。 顾名思义,这是一个“内存中”存储。 当应用程序终止时,一切都消失了。 基本核心数据资料 为了了解正在发生的事情,我希望您解释一些核心数据基础知识。 托管对象模型是您在Xcode中创建的模型。 它描述了数据结构的实体。 该模型仅描述您的数据结构如何,不包含任何数据。 因此,在我们的测试用例中,我们想测试我们的业务逻辑是否可以与数据模型一起很好地工作。 因此,我们必须使用与生产中相同的模型。 让managedObjectModel = NSManagedObjectModel.mergedModel(来自:[Bundle.main]) 持久性存储协调器的作用类似于“持久性存储”的包装,而在大多数应用程序中,您通常只有一个持久性存储。 商店协调员知道数据结构。 让persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel:模型) 持久存储是数据的“存储”逻辑。 CoreData默认使用SQLite。 但是在我们的情况下,我们要使用“ In-Memory ”。 这意味着在我们的测试用例中,存储协调器具有一个(内存中的)持久存储。 persistentStoreCoordinator.addPersistentStore(ofType:NSInMemoryStoreType,configurationName:nil,at:nil,选项:nil) 被管理对象上下文是我们与之交互的类。 它处理所有众所周知的CRUD方法(创建/读取/更新/删除) 。 由于它就像商店协调器上的立面一样,我们只需要使用包含内存中商店的商店协调器创建一个新实例。 让ManagedObjectContext = NSManagedObjectContext(concurrencyType:parallelType)managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator 如果您仍然有一些问题不清楚CoreData的工作原理,我强烈建议您观看Cocoacasts的这段视频: Cocoacasts解释了核心数据栈 让我们看一下代码 这是“临时”存储的完整代码。 我的应用程序“ PursCreate”中使用的完整代码。 开始了。 该方法只是创建了一个我们可以与之交互的新上下文。 关闭应用程序后,您存储的所有数据都将消失。 现在,您可以测试持久层,而无需添加模拟器。

Unity 3D + MakeHuman + Vuforia =增强现实世界

没有什么能比让您的想象力在现实世界中发挥更大的乐趣了,这项技术已经在某种程度上控制了一切并连接了一切。增强现实(AR)是一种神奇的创作,广泛应用于各个行业,使您感到自己至少在虚拟世界中可以实现您的愿望。 增强现实每次使用都是新事物。 AR是实时摄影机,您的数字对象可与现实环境互动。 AR使您可以坐在Lion旁边或什至位于狮子的上方。尽管很多人正在现实中实现它,但我知道这是一个有趣的例子。 因此,AR的主要目的是利用技术本身进行冒险。 我为移动iOS实现了增强现实应用程序,这就是它的工作原理。 背景图片是我的杂志书的封面,这个人正好站着一个使用’MakeHuman’创建的类人动物.MakeHuman是一个旨在创建虚拟人的开源工具,它是一个完整的工具,可以帮助我们创建逼真的类人动物角色。可以导出到其他软件工具并与之一起使用。可以在其他软件工具中对这些3D模型人形生物进行进一步的改进,例如人类的步行,奔跑,坐下等动作。让我们简要讨论如何导入这些3D模型人形生物。人物融入Unity并让这个人走。 使用ARCamera配置Unity并将Vuforia的SDK导入到您的项目中。鞋子,衣服和头发的颜色都是小的眼球。它还具有您想要您的男人像美国人,亚洲人那样的人的特征。很酷吧!花些时间熟悉一下MakeHuman中所有可用功能的外观。 聪明,不是! 保存您的人类并将其导出到Unity项目的资产。将这些人形生物放置在ImageTarget上,相应地转换您的对象。您可以在unity项目中进行测试以查看对象是否正确放置。我们现在已设置了运行该应用程序的基本功能但是,更有趣的是让这些人为您的动作而移动。另一个基本功能是当用户触摸屏幕时,3D模型进行移动(行走,奔跑,坐着,跳动)。我们可以从Asset store下载动画化身我使用了“ Raw Mocap数据”,该数据由虚拟形象的不同动画组成。 现在,让我们的人体模型移动,为控制器添加所有动作和它们之间的过渡,让步入空闲并向步入空闲添加参数,并给出一些大于或小于该值的条件,我们将使用它稍后控制脚本中的动画。让我们看看我们是否在同一页面上。 现在让我们继续进行一些编码。使用您熟悉的语言创建C#脚本或JavaScript。这可能是我编写过的最简单的代码之一。只需根据用户的触摸次数用相应的动画更新功能即可。代码段: 你去了!!!!! 将您的项目构建到移动iOS或Android上并运行.charm之类的作品。这些超赞的工具提供了许多功能。深入了解所有令人惊奇的功能。即使与您一起学习,也请分享您对实现这些想法的想法AR应用。

iOS开发基础:功能

什么是功能 ? 功能是执行特定任务的一组步骤。 函数是您在程序中使用的一种过程或例程,因此您不必重复自己。 让我们开始写一个,我会一路解释。 功能 每个功能都必须以单词func infront开头。 这就是我们声明函数的方式。 func computeShapeArea 之后,我们写出可以是任何名称的函数名称,但建议使用描述性名称,因此在较大的程序中,将更容易理解函数的用途。 func computeShapeArea(length:Int,width:Int) 之后,您可以看到我在其中添加了两个括号和一些变量。 它们是什么,它们是干什么的? 这些称为参数。 当您的函数需要一些输入数据来工作时(在这种情况下为长度和宽度来计算面积),可以使用参数。 使用它们的方法是首先选择一个名称,在这种情况下为长度和宽度,添加一个冒号,然后此参数将为数据类型,在这种情况下为整数。 func computeShapeArea(length:Int,width:Int)-> Int { } 如果要让函数返回某些内容,请编写箭头符号“->”,然后放置数据类型。 稍后我们将讨论返回数据,现在就跟我来。 在数据类型之后,您要写两个大括号。 在这些括号内,您将编写函数的功能。 func computeShapeArea(length:Int,width:Int)-> Int { 令面积=长*宽 返回区 } 功能现已完成。 现在,您可以输入数据来计算形状面积,它将存储在函数内部的area变量中,然后返回该变量。 要使用它,请在操场上写下函数的名称,如果按回车键,它将自动完成: computeShapeArea(长度:3,宽度:4) 在右侧,您应该看到函数的结果。 在此示例中,您需要输入两个值,否则该功能将不起作用。 尝试用其他数据编写其他示例。 你们中有人想知道如何使功能更精确吗? 如果您做得很棒,但是您将如何做呢? 您可以通过将参数和返回类型更改为double s来做到这一点,以便该函数将接受十进制数字,对其进行计算并返回“更精确的”值。 好的,现在让我们尝试创建一个更高级的功能。 假设您的抽屉里藏着一些钱,想买辆车,但是首先必须检查是否有足够的钱来做。 为什么要打扰,我们将编写一个函数为您检查check var myHiddenMoney = 16000 var newCarPrice […]

Moya入门

Moya是一个Swift网络抽象库。 它为我们提供了一种无需直接与Alamofire进行通信即可进行网络呼叫的抽象方法。 通过本教程,我们将学习如何开始使用框架,发现一些技巧和窍门以及从代码示例中学到所有基础知识。 让我们首先讨论为什么不使用 Moya: 它为您的项目引入了依赖性。 项目的成功部分取决于Moya的稳定性。 有更多原因使您不想使用Moya,但它们都是第一点的衍生副作用。 您应该始终考虑为任何项目添加依赖项的成本。 要更深入地分析为什么最好在Swift中从头开始构建自己的API管理器,请帮个忙,并阅读Matteo Manferdini撰写的精彩文章。 刚开始使用Cocoapods时,我以为找到了一些开发人员的超能力。 我最终意识到,了解事物的实现方式比拥有库中的超级代码更为重要。 这就是您提高开发人员技能的方式。 Moya背后没有一些与服务器通信并返回JSON的黑魔法代码! 如果我们允许别人去思考,我们将失去力量和收缩的能力。 —艾伦·怀特 为什么您会选择Moya: 立即设置API管理器。 干净的代码和最佳实践。 专注于应用程序的核心功能,而不是网络。 易于为单元测试添加网络响应。 了解如何使用流行的Swift网络库。 您是否曾在工作岗位上看到“使用REST API的最佳实践和知名库的经验”? 我一定有 使用Moya这些和其他包含的内容有很多好处,但这并不意味着用纯Swift编写网络层是困难的或不希望的。 可以使用首选的依赖安装方式来安装Moya:https://github.com/Moya/Moya#installation 提示:安装依赖项时,请始终指定库版本。 例如,如果您正在使用Cocoapods,请为您的项目指定一个特定的版本号! pod’Moya’,’10 .0.1’#撰写本文时为最新版本。 在建立网络经理之前,我会事先建议一些设计和规划! 是的,我知道,作为开发人员,我们只想获取代码。 但是花一些时间来计划我们的工作将是值得的投资。 那么,我应该计划构建一个网络管理器吗? 没有那么多! 让我们保持简单,直到两个问题。 我总是在计划时会先提出一些需要提供答案的问题: 我将向哪些端点请求数据? 如何建模从端点返回的数据? 当回答这两个问题时,我只需简单地在笔记中列出所有端点,然后从预期的JSON创建伪代码模型。 如果您正在使用已经有文档的API,则可以使用提供的文档作为参考。 对于大多数示例,我将使用The Movie Database API🍿。 借助Swift 4的Codable协议,我们无需使用任何对象映射库或编写自定义映射器即可将JSON转换为模型。 让我们建立我们的电影模型,MovieResults模型。 电影模特 如果我们向The Movie Database API请求获取播放电影的请求,则返回的JSON响应如下所示。 […]

在iMessage中创建看起来像聊天气泡的聊天气泡-简单的方法

本文是有关创建(iMessage样式)聊天气泡的两篇文章的第一篇。 本文基于Rob Kerr的原始教程。 在本文中,我们将探讨创建带有尾巴的聊天气泡的简单方法。 在第二篇中,我们将介绍高级方法。 本教程是使用Swift 4.1和Xcode 9.2创建的。 源代码在Github上可用。 本教程将教您如何创建一个带有尾巴的聊天气泡,它看起来像是iMessage中的聊天气泡。 但这与创建一个成熟的聊天应用程序无关。 我将专门关注如何以简单的方式创建动态大小的气泡。 让我们开始吧! 我们的气泡将基于易于拉伸的图像 为了拉伸图像,我们将使用resizableImage(withCapInsets capInsets: UIEdgeInsets, resizingMode: UIImageResizingMode) -> UIImage UIImage实例的resizableImage(withCapInsets capInsets: UIEdgeInsets, resizingMode: UIImageResizingMode) -> UIImage方法 另外,我们将使用boundingRect(with size: CGSize, options: NSStringDrawingOptions = [], attributes: [NSAttributedStringKey : Any]? = nil, context: NSStringDrawingContext?) -> CGRect String实例的boundingRect(with size: CGSize, options: NSStringDrawingOptions = [], attributes: [NSAttributedStringKey : […]

使用Alamofire和SwiftyJSON构建简单的API搜索

本文有助于设计带有SearchBar的UITableViewController并在我们每次开始键入时填充结果,然后在点击搜索结果时打开SafariWebView。 此外,本文还有助于了解如何将Alamofire与SwiftyJSON结合使用以访问 API并获取一些结果,对其进行解析并将结果显示在UITableViewController中。 在Xcode中创建一个新项目 2.转到终端并输入项目目录路径,然后键入pod init这会在我们的目录中创建podfile ,然后从项目目录中打开此podfile,然后将其放入其中 平台:ios,’9.0’target’WikiSearch’做 use_frameworks! pod’Alamofire’,’〜> 4.7′ pod’SwiftyJSON’,’〜> 4.0’结束 然后在终端中运行pod install ,这将帮助我们安装这些依赖项并创建.xcworkspace文件,关闭项目并打开* WikiSearch.xcworkspace *文件。 如果您不喜欢cocoapods,请在这里看看 3.在Main.storyboard添加带有NavigationController的UITableViewController 4.我将创建一个ImageView , TitleLabel和DescriptionLabel ,因此TableView单元中将有三个UIElement。 5.将一个新类CustomTableViewCell子类化UITableViewCell到项目中,并从表视图单元格中添加引用布局。 整个项目可以在这里下载 你可以通过LinkedIn与我联系 谢谢阅读… later稍后在日记中阅读此故事。 every‍💻每个星期天早晨,您都可以在收件箱中等待本周最受关注的Tech故事。 阅读技术新闻中的值得注意。