Tag: swift

录制时在iPhone上切换相机

马里亚诺·阿卜杜拉(Mariano Abdala) 不久前,有人问我是否可以在iPhone上从前向后切换相机时连续录制视频。 标准相机应用程序或标准相机控件均不允许这种行为,但是我怀疑我们可以使用定制解决方案来做到这一点。 作为概念验证,我的方法是,每当用户要切换时,我都会停止在一个摄像机上进行录制,而在另一个摄像机上开始录制。 录制完成后,我便将视频拼接在一起。 这不是最优雅的解决方案:从一台摄像机切换到另一台摄像机留出很小的空隙,最后的拼接步骤需要一段时间才能完成。 尽管如此,对于我的用例来说已经足够了,所以让我们对其进行更详细的研究。 该示例应用程序将包含两个主要组件,一个用于记录,一个用于缝合。 录音可能是最简单的录音。 如果我们可以从前置摄像头录制,也可以从后置摄像头录制,则可以交替录制。 这意味着设置两个不同的AVCaptureSession ,它们仅在AVCaptureDevice.Position ( .back或.front )上有所不同。 然后管理屏幕状态,并将输出设置到一个临时文件夹,为视频加上时间戳,以便我们以后可以轻松列出正确排序的视频。 然后是拼接,或更确切地说是编辑 。 iOS中的视频编辑功能非常强大,但是很容易失去其所有功能和配置范围。 主要入口是AVMutableComposition ,您可以在其中添加AVMutableComposition轨道(音频或视频),然后可以在这些轨道上添加AVAsset ,后者可以是音频或视频文件,并使用音量,大小和大小对其进行配置。转换(例如缩放,旋转等)。 让我们看一下添加两个主要音轨的样子: 对于本练习,配置非常简单。 遍历临时文件夹中的所有文件,并将音频和视频资产按顺序添加到音频和视频轨道,然后配置最小大小(因为前后摄像头具有不同的分辨率)并旋转视频以使其保持纵向模式。 现在,我们已经按照指令配置了所有输出轨道,让我们使用AVAssetExportSession将它们导出到视频文件中,并进行一些其他配置: …最后,是:导出,并且可以播放了 ! 尽管此方法表明仅通过轻按翻转按钮就可以在同一会话中继续记录是可行的,但它的缺点是在切换相机时会有间隙。 在我对iPhone 6的测试中,差距约为1.5秒。 这可能适合您的用例,也可能不足。 在致力于构建完善的解决方案之前,我们还可以测试其他更优雅的方法。 始终保持两个AVCaptureSession处于活动状态。 只需显示或记录适当的内容即可。 尽管这将大大减少这种差距,但肯定会增加电池消耗,这对于长时间的录制会话来说是不明智的。 从单个AVCaptureSession添加和删​​除前后摄像头的AVCaptureSession 。 这种方法似乎是最简单的方法,并且API允许它使用,但我找不到能做到这一点的示例。 取而代之的是,大多数示例都将通过切换摄像机创建一个新会话,我怀疑这是有充分理由的。 第三个连续的AVCaptureSession用于音频,该音频不会翻转或切换或更改输入设备。 这不会阻止视频间隙,但是会通过提供真正恒定的音频来提供真正的连续感。 然后,最困难的部分将是找到一种音频和视频同步的方法,但是由于来自三个来源(前,后和连续音频)的声音是相同的,因此无需任何用户交互就可以做到这一点。 。 不必立即停止活动的摄像机,而要在新创建的AVCaptureSession上注意符合KVO的isRunning属性。 方便了,使旧的会话保持活动状态,直到新会话启动并运行为止。 这不会完全消除差距,甚至可能会引入一些重叠。 我们需要更多的研究来支持这一说法。 虽然我们似乎无法完全避免视频间隙,但可以通过添加过渡效果(例如模糊,淡入淡出等)来填补这些空白,从而减轻视频间隙或使其无意通过。 我期待深入探讨此问题,因为它显然是iOS工具集上缺少的东西,并且可以为每个人的利益而组成。 最初于 2018 年3月13日 发布在 […]

iOS-OpenCV和Swift

由 Boris Ohayon 撰写 | 2016年8月24日 今天,我们学习如何在iOS和Swift中使用OpenCV💪 OpenCV是一个用C ++编写的库。 使用Objective-C可以做到这一点,但是使用Swift可以使事情变得更加复杂,但是通过实践,在Swift中使用C ++库是没有问题的。 这是我们要做的: 我们将需要编写一些Objective-C ++,但是对于我们Swift爱好者来说,这没什么大不了的。 让我们开始 ? 步骤1 —下载适用于iOS的OpenCV框架 前往http://opencv.org并下载该框架的最新版本。 我当前正在使用版本2.4.13。 第2步-创建一个新的iOS项目 创建一个新项目,这里没有新内容。 选择Swift作为语言,您就完成了。 第3步-在项目中导入OpenCV 要将库导入项目中,只需将下载的OpenCV文件拖放到Project Navigator中 。 出现此窗口时,请检查复制项目(如果需要) 。 第4步-创建桥接头 该库现在在我们的项目中,但是如前所述,我们无法立即与其进行通信。 我们需要一个桥接头。 通过转到文件>新建>文件 (或⌘N)并在iOS>源中选择Cocoa Touch Class来创建一个Objective-C文件。 将其命名为OpenCVWrapper ,它将成为Objective-C类的子类,该类继承 NSObject 。 当我们在Swift项目中创建Objective-C类时,Xcode很聪明,并建议创建一个桥接标头。 单击创建桥接标题 。 现在,我们创建了三个文件: OpenCVWrapper.h , OpenCVWrapper.m和 -Bridging-Header.h : 第5步—配置桥接头 桥接标头告诉我们的Swift代码可以使用哪些Objective-C的东西。 OpenCVWrapper.h将成为我们Objective-C代码的大门,因此我们将以下行添加到桥接头文件中:

测试可观察的dengan RxTest

Setelah merefresh bagaimana caranya memakai RxSwift untuk keperluan开发iOS,supaya tidak lupa dan空白。 Saya sekalian aja belajar bagaimana melakukan testing可观察的memakai RxTest。 在UICollectionView中无限滚动UICollectionView UIAPIView的内容,并在API API dari Pokeapi中显示。 Jadi,Yang akan di test,apakah data pada集合视图akan bertambah sebanyak 20项目,setiap menyentuh akhir dari UICollectionView 。 Misalkan saya punya视图模型sederhana seperti ini 拜克拉(Baiklah),北穆莱(kula mulai)buat kasus ujinya dulu,塞德拉(sederhana saja)… 事件:-(0,())-(100,())-(150,())-(200,())-(250,())—>预期结果:5 * 20项= 100项 好吧,bagaimana langkah […]

如何将Firebase SDK集成到iOS应用(SWIFT 4)

什么Firebase? Google的Firebase是一个移动平台,可让您开发移动应用。 它可以作为您应用程序的后端。 为什么选择Firebase? 借助Firebase,您将有机会更多地使用您的应用程序。 因为操作和内部功能由Firebase维护 您将学到什么? 这是入门指南。 我不会深入探讨。 但是,您将能够将Firebase与您的应用程序集成。 下次您将学习如何创建用户,数据库和存储区域。 第一步:在firebase网站上创建一个项目。 第二步:确保您选择“将Firebase添加到您的iOS应用”。 第三步:从您的XCode项目复制Bundle Identifier。 然后,转到firebase并将Bundle Identifier粘贴到iOS bundle ID中 之后,下载Google服务信息plist并将其添加到您的Xcode项目中。 第四步:在开始此步骤之前,请确保已安装CocoaPods。 现在,请您集中精力。 我们将执行以下3个步骤。 进入终端,通过命令进入项目目录。 然后,编写:pod init 然后,转到项目目录,您将找到一个Podfile。 您必须通过TextEditor打开此文件并编写以下命令:pod’Firebase / Core’ 别担心,我们快完成了。 第五步:回到终端并写“ pod install” 最后,转到您的项目目录,然后使用扩展名.xcworkspace打开项目。 仅此而已。 将Firebase集成到项目中,恭喜您! 最后,一定要在学习新知识时写一篇文章来分享您的知识! 🙂

几乎可以使自己成功的应用

自从我7月开始Swift学习之旅以来,我发布到Apple App Store的大多数应用程序都是游戏。 实际上,它们都是非常基本的游戏。 我的发布时间表中的下两个应用程序也是游戏,尽管其中一个是具有多种测验类型的测验应用程序-稍后将进行更多介绍。 我的第一个非游戏应用程序于8月下旬启用,并且非常简单,几乎可以自行构建。 令人惊讶的是,IOS和Swift易于使用,尤其是由于大量易于使用且文档完善的库。 实际上,每个新版本使它们变得更容易。 在研究AVFoundation以便为基于声音的应用程序找到更好的方法和更多选择时,我遇到了AVSpeechSynthesizer。 基本上,它使您可以让电话语音读取已定义的字符串。 使用发话方法,texView和按钮,我可以允许用户编写内容并将其读取给他们。 为我说是出生的。 我添加了一些样式,一些预定义的快速短语和一个停止按钮。 我为应用程序添加了一些设计,并且可以开始使用了。 第一个版本几乎可以完成所有工作-让您编写文本并阅读,或者从四个预定义的文本字段之一中进行选择。 第二版将提供更多默认短语,让您创建自己的默认短语,甚至还可以阅读一些热门新闻。 在第二部分中,我将解释如何做到这一点,并提供一些示例代码,以便您可以自己完成。 您可以在Apple App Store上下载完成产品,或在GitHub上获取供自己使用的代码。

Swift控制台记录器

最后结果 : 几天前,我正在使用此记录器。 希望与您分享,因为最终结果非常简洁。 因此,首先您需要的是您的应用可能需要的日志类型。 在我的示例中,我几乎涵盖了我所知道的所有日志类型,尽管我很确定您只需要其中一半。 这是一个枚举,因此只需删除不需要的案例(或更改符号)。 它是这样的: 如果我们想获取文件名,函数名和行号,则必须在调用函数之前使用Swift的宏(#file,#function,#line),然后将其作为函数的参数发送。 从函数主体中调用这些宏将打印Logger 的文件,函数和行。 我们可以使用的一个小技巧是使用默认值声明参数。 这将获取调用者的值,我们将获得想要获得的结果。 这是Logger类: 这是如何使用它: Logger.log(.e,“ JSON解析失败”)Logger.log(.w,“我们没有烤面包粉!!”) 希望你喜欢。 🎵“快乐快乐,快乐快乐”🎵

领域平台

当我们首先开始谈论Realm Platform时,我们需要关注Realm数据库提供的功能,realm是我们可以在本地存储和获取数据的地方,当记录被更改并需要手动更新到服务器时,这是一项繁琐的工作。 由于每个人都需要实时数据,因此Realm Platform进入解决方案,因为即使一秒钟的延迟数据也被标记为过时,Realm Platform是实时同步的解决方案,并提供身份验证和更多功能。 让我们开始吧… Realm平台是基于noSQL的服务器和客户端组件的组合,这些组件通过快速高效的同步协议进行连接,以启用实时的,已连接的应用程序,响应迅速且性能与网络状态无关的服务。 领域平台具有两个主要组件。 领域数据库 领域对象服务器 这两个组件协同工作以自动同步数据。 领域数据库 Realm数据库嵌入在客户端上,是一个功能齐全的,面向对象的跨平台数据库,可将数据持久存储在设备上 Realm数据库是轻量级且高性能的,能够处理非常大的数据负载并在几分之一秒内运行查询。 它基于共享的活动对象,无需编写网络,序列化或对象关系映射代码,即可与Realm Object Server无缝无缝地实时同步数据。 领域对象服务器 Realm的统一数据模型扩展到Realm对象服务器,该服务器在设备上镜像Realm数据库。 它充当移动应用程序体系结构中的中间件组件,并管理数据同步,事件处理以及与旧系统的集成。 Realm Object Server可以实时高效地同时在许多设备上同步数据,并自动解决冲突。 首先,我们需要安装Realm Object Server 要托管Realm对象服务器,这些是受支持的操作系统 macOS 10以上 Ubuntu 16.04以上 RHEL 6+ CentOS 7以上 端口要求 领域对象服务器利用TCP上的Web套接字连接来同步数据。 这意味着您将需要确保防火墙允许通过ROS配置为使用的任何端口进行TCP通信。 默认情况下,这是用于HTTP流量的端口9080 。 快速开始安装 curl-s https://raw.githubusercontent.com/realm/realm-object-server/master/install.sh | bash 手动安装 // Ubuntu 16.04(64位;不支持32位) //建议您以普通用户身份安装服务器。 sudoapt获取更新 sudoapt-get install build-essential libssl-dev […]

Codables…….yaaay !!!!

Codables –是节省大量时间和节省生命的工具。 当我们必须从网络调用中获取数据并保存到对象或结构以在应用程序中显示数据时,我们必须经历很多这样的过程。 与实时应用程序相比,这是一个相对较小的json结构,用于澄清我的意思,让我们看一下我用于解析的json数据: 因此,与实时数据相比,这确实很小,想象一下当您拥有如下数据时进行解析: 我知道它很大,所以Codables作为超级保护者来了。 因此,让我们看一下使用codables而不是常规解析,我向您保证 就是这样,哦,是的,您可能已经注意到只有一行代码可以完成所有工作: 您可能想知道的是,什么是“ WeatherArray”,它不过是经协议确认的结构,如下所示。 WeatherArray包含Weather对象数组,啊哈! 让我们看看天气: 什么!!!,为什么我以这种方式创建对象? 您唯一需要强调的就是创建确认json架构的对象。 正是我所做的,以上结构实际上证实了以下json架构。 因此,请继续尝试制作可编码对象,以确认不同的json体系结构。 发表评论…如果您有任何困难,我可以帮助您😇 注意:我真的很抱歉图像大小,我将在下一篇文章中进行整理。

Usando Today Extensions com Swift

Today扩展 conhecidos tambem como 小部件 , 扩展了 Today View的外观(在iOS上使用esquerda进行安装)。 今日扩展程序可用于示例性应用程序的快速信息,例如,每天在iOS上进行临时扩展的应用程序,例如本地温度设置。 Nesse artigo pretendo mostrar de maneirabásicaerápidacomo criamos uma 今天扩展。 新增或更新目标,不再需要任何目标,而目标目标则是iOS 今天的扩展。 Criamos o target em,然后单击“ 文件”>“新建”>“目标”。 没有菜单escolhemos或Today Extension。 徽标depois de criarmos或seguinte estruturaécriada。 在Interview上可以看到今日的Arquivos通讯集,或者在TodayViewController.swift和MainInterface.storyboard中 。 今日的UIController是 UIViewController的子类,它是由NCWidgetProviding实现的。 在今天的新闻发布会中查看更多内容,或者在Storyboard criado中使用podemos,然后在ViewCode或.xibtambém中使用como首选产品,在没有Info.plist criado的情况下,使用apagar作为NSExtensionMainStoryboard的关键一个关键的NSExtensionPrincipalClass传递 COMO值,或者执行UIViewController。 Plist criado junto com o今天扩展,com o MainInterface.storyboard como故事板负责人 Plist modificado,com或UIViewController今日发布扩展como主体 每日更新的布局, 今天的扩展 estados或compacto eo extensionido。 […]

有效地使用第三方库#decoupling

我最近读了我的一位同事的推文,说: “我们应该以更容易删除功能的方式设计类! 这表明事情真的脱钩了” 每次将第三方SDK /库添加到项目中时,请查看是否可以为其添加包装,并在应用程序中使用该包装。 这使您可以灵活地更改或更新库,而无需将来进行大量更改。 让我们来看看我们在上面讨论的情况下该如何做。 因此,我们将创建一个包装器(我们将其称为MAAnalyticsManager),这就是它的外观 现在,无论何时需要跟踪页面视图或事件,都可以直接在包装器或管理器上调用该方法,而不必直接调用MixPanel。 而且,如果以后需要更改为其他Google Analytics(分析)SDK,则只需更改一个文件即可。 那不是很棒!!