如何使UIViewController包含更加容易

希望你们中的大多数人熟悉Container View Controller的概念。 这是一个非常有用的Cocoa功能,我发现自己最近越来越多地使用它。 不过,由于您可以在Apple的文档中找到它,因此我将不介绍其实现细节。 让我们深入研究一些我认为超级有用的场景。 嵌入UITableViewController 。 每个人都去过那里。 您有一张桌子,周围还有一些其他内容。 大多数人只是将UITableView添加到其UIViewController子类中。 但是通过这种方式,您将放弃通过UITableViewController免费获得的许多功能,例如: 自动滚动到聚焦的UITextField和UITextView以便它们不会隐藏在键盘后面 默认的UITableViewDatasource和UITableViewDelegate实现 完美无瑕的提拉精神 仅举几例。 如果将UITableViewController放入容器中,您将获得两全其美的UIViewController –您自己的UIViewController子类的灵活性,用于装饰内容和UITableViewController内置功能 2.共享的屏幕部分-出现在应用程序不同部分的屏幕部分。 如果使用CleanSwift体系结构,这将特别有用。 您可以轻松重用完整的场景,并且已经设置了他们的所有助手(交互器,路由器,工作程序)。 3.显示错误和场景的空状态。 4.将其用于控制​​器动画,因为与使用View Controller Transitions的UIViewController相比,使用UIViewPropertyAnimator和UIGestureRecognizer UIView动画更容易。 像使用其他视图一样,使用嵌入式控制器创建容器视图并对其进行动画处理。 您可以在DisplayInDrawer lib中看到这种方法。 在许多其他情况下, UIViewController包含可以简化程序员的生活。 但是–有一个警告。 假设您有一个嵌入式UITableViewController 。 您刚得到数据,因此创建了一个控制器,注入了数据,将其嵌入并显示。 到目前为止,一切都很好。 新数据到来。 在许多项目上,我多次看到使用相同的例程。 “因此您创建了一个控制器 ,注入了数据,……”。 错了 。 尽管已经有一个控制器,但您无需实例化它。 除非这样做可能很昂贵( viewDidLoad往往很忙,对吗?),否则您可能会引入疯狂的错误,例如注册重复的观察者,完成处理程序等。如果您的控制器分配不正确,这会变得更糟。 尽管我确定您的控制器确实会释放 👮,但由于您进行了仔细检查,不是吗? 解决方案是每次检查控制器是否已经存在,以及是否存在,只需注入数据即可。 不要创建新实例。 但这会变得很乏味,您很容易忘记进行此检查。 输入UIViewController-DisplayChild扩展名,该扩展名通过嵌入(显示) 类型而不是instance来缓解此问题。 您为它提供控制器的类型 ,配置闭包和容器视图。 该扩展程序决定是否需要实例化控制器,如果需要,则创建一个实例,在其上运行配置闭包,并将其嵌入到指定的容器视图中。

推出适用于iPhone和iPad的BuffaloNews.com iOS应用程序的新Beta版

我们很高兴地宣布,我们已经为BuffaloNews.com启动了一个新的免费iOS应用。 如果您不是iPhone用户,则始终可以在移动浏览器上为BuffaloNews.com添加书签。 其他常见问题: 问:该应用程序免费吗? 答:是的,该应用程序是免费安装的,但是如果您超出了每周的文章限额,则可能还会遇到我们的付费专区。 数字访问软件包将为您提供对应用程序的无限访问权限。 致电716–842-1111,致电我们的客户支持团队,或访问https://subscribe.buffalonews.com/进行订阅。 问:您可以访问桌面上应用程序中保存的故事吗? 或者,如果我将故事保存在iPhone上并想在iPad上的应用程序中阅读故事怎么办? 答:故事只会保存到您正在阅读的设备上。 问:当我在应用程序上查看同一故事时,为什么看不到网站上的某些内容(例如嵌入式推文或图形)? 答:我们的开发人员已意识到此问题,并正在努力进行修复。 在此之前,您可能会注意到应用程序中未出现某些交互式多媒体内容。 问:为什么我不能像在BuffaloNews.com上那样评论文章? 答:Facebook的评论将在此应用程序的未来版本中添加,并且将与我们在BuffaloNews.com上的评论部分相同地工作。 您仍然需要登录您的Facebook帐户才能在评论部分中发布。 您在The Buffalo News应用程序中所做的评论也将出现在BuffaloNews.com上。 请继续关注未来几周的更新。 问:我尝试使用您的搜索功能搜索文章,但是找不到我想要的东西。 答:我们已经在新应用中添加了Google搜索功能,但是我们的开发人员正在继续改进此功能。 如果您对应用程序还有其他疑问或反馈,请发送电子邮件至 feedback@buffnews.com 。

如何使用命令构建iOS项目?

xcodebuild教程 在开始本教程之前,我们假设您正在使用pod来管理iOS项目,并且该项目使用以下配置。 项目名称: Bookshop.xcodeproj 工作区名称: Bookshop.workspace 构建配置:调试和发布 目标: bookshop_dev和bookshop_release 方案: bookshop_dev_scheme和bookshop_appStore_scheme。 生成,运行,测试和分析正在使用调试配置。 配置文件和存档正在使用发布配置。 每个方案仅包含1个相关目标。 阅读xcodebuild操作列表以及如何使用cmd man xcodebuild或xcodebuild -help 列出项目或工作区目标,构建配置和方案 xcodebuild -list 使用方案清理项目或工作区 xcodebuild clean -workspace Bookshop.xcworkspace -scheme bookshop_dev_scheme xcodebuild clean -project Bookshop.xcodeproj -scheme bookshop_dev_scheme 使用方案构建工作区 xcodebuild build -workspace Bookshop.xcworkspace -scheme bookshop_dev_scheme build关键字在这里是可选的。 xcodebuild的默认操作是build 。 存档工作区 xcodebuild archive -workspace Bookshop.xcworkspace -scheme bookshop_dev_scheme -archivePath ~/Downloads/bookshop_dev.xcarchive 创建一个IPA xcodebuild […]

HLS和AVPlayer的基本概念

在本文中,我想探讨什么是HLS,AVFoundation家族以及如何使用HLS URL构建简单的本机iOS播放器。 什么是HLS HLS代表HTTP实时流。 它是一种媒体流协议,用于通过Internet传递音频和视频媒体。 使用此协议带来了更快的Internet流传输的主要区别在于,它的想法是将单个视频切成小块,而不是下载整个媒体文件。 您甚至可以根据带宽等因素使用多种质量,因为这些块已编码并且可以在播放列表中的不同质量设置中使用。 第一次看起来有点复杂,但是它只是遵循HLS协议的几个标签,玩家可以调整并使用所有这些提供的数据来提供最佳的流传输质量: #EXTM3U #EXT-X-MEDIA:TYPE = AUDIO,GROUP-ID =“ stereo”,LANGUAGE =“ zh-CN”,NAME =“ English”,DEFAULT = YES,AUTOSELECT = YES,URI =“ audio / stereo / en / 128kbit。 m3u8“ #EXT-X-MEDIA:TYPE = AUDIO,GROUP-ID =“ stereo”,LANGUAGE =“ dubbing”,NAME =“ Dubbing”,DEFAULT = NO,AUTOSELECT = YES,URI =“ audio / stereo / none / 128kbit。 m3u8“ #EXT-X-MEDIA:TYPE = […]

直接从锁屏通过Dropbox提交费用收据

轮班完成:提示和技巧 适用于iOS设备(iPhone / iPad)的Dropbox应用程序具有这个巧妙的小窍门,可帮助您及时了解费用收据。 这种方法的妙处在于,设置好之后,您无需再进行锁屏操作,例如在接待客户晚餐时就可以收据了。 设定 1.在您的iOS设备上,从App Store下载Dropbox。 2.登录或设置一个新帐户。 3.从屏幕顶部向下滑动以显示通知中心。 向右滑动即可切换到“今天”屏幕。 点击圆形的“ 编辑”按钮。 (请注意,可能已经列出了一些应用程序小部件,在这种情况下,您必须向下滚动到页面屏幕的底部) 4.点击“ Dropbox”旁边的+图标 5. Dropbox可以添加到左列或右列区域。 点击完成以确认。 使用Dropbox锁屏小部件 现在,我们将从您的锁屏上捕获并上传费用收据。 想象一下,您在一家餐馆里,刚刚与客户举行了一次早餐会。 您已经用卡付款,用现金支付了小费,并且刚刚收到了收据。 接下来是要做什么: 1.使用相机从锁屏菜单上拍摄收据照片: 2.返回默认的锁屏,向右滑动。 找到“ Dropbox”小部件,然后点击“ 上传照片”选项。 3. Dropbox应用程序将打开,您将必须输入PIN码或使用TouchID继续。 现在,选择要上传的照片,然后点击选择文件夹 。 4.点击屏幕底部的“ 创建文件夹”选项,创建一个名为“费用收据”的新文件夹。 5.现在,在屏幕顶部点击刚刚创建的Expense Receipts文件夹,然后在底部点击“设置位置”。 6.收据中的照片将带有通用时间戳记,因此最好将其重命名为便于以后处理的名称。 点击文件旁边的向下箭头 ,然后在出现的菜单中点击“ 重命名 ”。 7.将文件名更改为更具描述性的名称。 我们完成了! 设置完成后,此工作流程将变得轻松快捷。 它大约需要30秒钟才能完成,比在将来的某个时刻要花大量的物理收据快得多。 每周将这样的故事发送到您的收件箱中: 订阅GSD新闻 。

Metal API简介

Metal是一种低开销,高性能的API,可以在GPU上执行图形和计算工作。 GPU的常见工作是绘制几何图形,而Metal的基本设计原理旨在帮助应用程序极其快速地绘制几何图形。 在GPU上执行绘制调用即可完成绘制几何图形。 绘图调用是图形命令和状态的集合,这些命令和状态在屏幕上产生视觉效果; 每个绘制调用都需要有自己的图形状态向量,这意味着它需要明确指定用于执行绘制的着色器,图形状态,数据缓冲区,纹理和渲染目标。 在所有上一代的硬件图形API(如OpenGL ES)中,更改状态向量都是非常昂贵的操作,因为所有API命令都必须在相应的硬件命令中转换。 这样做的成本通常全部在CPU上,负责执行这种转换的函数和所有API命令必须在GPU开始执行任何工作之前进行转换。 下图显示了典型的绘制调用序列以及从应用程序(CPU端)到GPU的执行流程。 设计原理与架构 金属围绕6个关键设计原则构建: 最薄的API,意味着减少在应用程序和GPU之间执行的代码量。 旨在为所有现代GPU硬件功能提供全面支持 减少昂贵的操作频率。 提供可预测的性能。 提供对命令提交的明确控制。 针对CPU行为进行了优化。 几乎所有现代手机游戏都倾向于以特定帧速率为目标来管理CPU和GPU工作负载,大多数情况下,此目标为60帧每秒(fps),而其他时间为30 fps。 下图显示了一个游戏的常见情况,该游戏试图优化CPU和GPU的工作量以保持稳定的30 fps:CPU为某一帧准备渲染命令,而GPU在下一帧消耗这些命令。 当一切都按预期工作时,此设置可以提供完美且平衡的并行性,但这是一种理想的情况,因为在现实生活中,大多数情况下,CPU生成渲染命令的时间要比GPU消耗它们的时间长得多,因此GPU空闲了一部分帧。 再详细一点看CPU必须执行的工作,我们可以将其分为两部分:CPU执行应用程序逻辑所花费的时间和CPU准备呈现API命令所花费的时间; 通常,后者是占用大部分可用帧时间的时间。 如下图所示,CPU无法在目标帧时间内转换所有API命令,这可能会导致GPU跳过帧。 Metal尝试着重于准备渲染API命令的工作,并提供了支持以最小程度地减少它。 这实际上释放了可用于其他活动的CPU时间,并且大部分时间都将这些额外时间用于生成更多绘图调用。 为了更好地了解Metal API如何达到这种效果,重要的是要了解GPU编程为什么在CPU上如此昂贵。 主要有以下三个原因: 状态验证:应用程序每次调用呈现API时,呈现API实现都必须验证调用是否以正确的方式执行:应用程序使用正确数量和类型的参数,并且硬件上下文将在进入状态后变为有效状态。通话完成。 但是还有更多! 在调用API时,实现还必须将API状态编码为相应的硬件状态,并再次检查其他硬件状态以弄清楚如何将它们组合在一起以将全局上下文移动到新的状态。 着色器编译必须编译所有着色器的源代码才能生成GPU机器代码,这通常在运行时发生。 通常,状态和着色器代码的描述方式与硬件真正期望的不完全相同,因此,当应用程序更改某些状态时,可能会发生,必须重新编译生成的机器代码。 GPU工作提交状态和着色器代码可以请求不在GPU端驻留的资源,因此必须将它们在内存中移动到GPU可以访问它们的位置。 因为所有这些,所有游戏所做的就是将共享相似状态和资源的操作组合在一起,目的是减少工作量并提高效率,因此我们通常将此过程称为批处理命令……但批处理命令需要在服务器上运行更多逻辑CPU创建这些批次。 因此,最终结果是,在为CPU安排适当的工作量以产生可让GPU在整个帧中保持繁忙并在目标帧时间内完成所有这些工作的工作量之间,始终存在一个平衡的工作。 Metal与众不同的原因在于设计原则,因此不经常进行昂贵的操作。 在Metal之前的所有渲染API中,特别是OpenGL ES,状态验证,着色器编译和GPU工作提交,都是在绘制帧期间发生的,这使得帧时间的管理不受事物的直接控制,而不受应用程序的直接控制。 Metal支持在渲染对象创建时进行脱机着色器编译和状态验证,这使应用程序不必担心将工作提交给GPU,仅此而已。 为了更好地理解所有这些,让我们详细研究Metal API的所有对象部分。 让我们来看看所有这些: 设备 ( MTLDevice ):这是物理GPU的抽象,将消耗渲染和计算命令; 这也是在Metal中执行任何操作的首选对象,因为应用程序与之交互的所有对象都来自该对象。 命令队列 ( MTLCommandQueue ):此对象存储所有命令,并允许应用程序控制所有命令的执行顺序。 命令缓冲区 […]

立即响应Native和Apple TV

我总是检查React Native中每个发行版的注释。 前几天,我对v0.36.0-rc.0中一个有趣功能的宣布感到惊讶:对Apple TV的支持。 我从查看提交(由dlowder-salesforce所做)开始,我发现UIExplorer示例项目已经对此提供支持,但是由于状态栏存在问题而无法正常工作,我认为这是因为没有t状态栏。 在分析了对项目所做的更改并阅读了github报告的有关该主题的票证之后,我找到了启用Apple TV的必要步骤。 好的,现在不用多说,这里是将Apple TV支持添加到新的React Native项目的步骤。 我将在步骤中尽可能详细: 创建一个新项目 react-native初始化apple_tv_example 使用package.json中的候选发布者 用以下命令替换本机版本(在我的情况下为^ 0.35.0): git://github.com/facebook/react-native.git#v0.36.0-rc.0 注意:由于它将是版本的一部分,因此将来将是可选的。 通过运行安装对软件包所做的更改 我 注意:您会收到一个 UNMET PEER DEPENDENCY 错误-没关系。 要验证软件包是否已正确安装,请 在 node_modules / react-native 下的文件中 查找对 TARGET_OS_TV的 引用 ,应该有很多。 通过在xCode上转到“文件>新建>目标”,然后选择“ tvOS>应用程序>单视图应用程序”,将tvOS应用程序添加到项目中。 通过在Linked Frameworks and Libraries中按“ +”将所有tvOS库链接到新目标。 在工作区中,搜索包含“ tvOS”的所有库,然后添加它们。 通过添加来添加对ObjC和LC ++的支持 $(继承)-ObjC -lc ++ 到“构建设置”下的“其他链接器标志”。 删除为新目标创建的文件夹内的所有文件和文件夹,但保留Info.plist。 通过删除Main storyboard文件的基本名称 (假设我们不会使用任何Storyboard)并添加App Transport […]

Swift 3.0课程笔记— Firebase

演讲人:王敏 Cocoapods的安装 固定版本:pod’Firebase / Database’,’〜> 3.0’再pod安装 如果用pod update会直接更新到最新版!! 火力基地 采用noSQL,以JSON互传资料 强制绑定Analytics服务 CloudKit无法看到其他用户上传的资料 登录Firebase并获取plist文件,不要修改到plist的档名 数据库 定义数据索引:.indexOn,增快搜寻资料速度 每增加一个索引,就需要补充记忆体空间(以空间换取时间) 影响新增,删除的速度(资料树需要调整) 如果没有使用Firebase存储,如何通过由base64EncodedString()上传和下载图片,档案大小限制是10MB 存储 若使用storage,将档案存放在Firebase storage 认证方式 以facebook登录为例 登录developers.facebook和pod’FBSDKLoginKit’,再照说明文件走 连结Facebook&Firebase,输入Facebook应用程序编号&密钥给Firebase 再从Firebase OAuth重新引导URI添加到Facebook应用程序设置中 令牌获得! 再写程式码将使用者使用facebook登入资料上传到Firebase Auth 再写程式码将使用者资讯上传到Firebase数据库 脸书 分享内容功能 初步权限:“ public_profile”,“ email”,“ user_friends”(FB朋友列表只能获取有使该这个App的朋友,并非FB上全部的朋友) 得到大头照: 利用API 利用FBSDKProfilePictureView 记得打开FBSDKProfile.enableUpdates(onAccessTokenChange:true) github的:git@github.com:dan12411 / HelloFirebase.git

5个让大脑保持敏捷的应用

我们一直都黏在手机上。 他们说我们正在迅速成为僵尸一代。 可能是真的。 无可否认,我们通过漫无目的滚动浏览Facebook提要或最差的Instagram来破坏我们的大脑细胞。 如果您仍然可以粘在手机屏幕上而不是成为僵尸,那么实际上可以使您的大脑变得更聪明,这不是很好吗? —我们挖出了以下五个应用程序,它们可以使您的大脑更聪明,更聪明。 提升 下载:iOS,Android Elevate是一款出色的应用程序,早在2014年就被评选为Apple年度应用程序-这很重要。 提升是一个独特的概念,它使用AI为您开发脑部锻炼,然后与您一起成长。 您使用的次数越多,您的算法就越强大。 每个用户都有自己的个性化测试和脑筋急转弯。 为了检验其主张,加利福尼亚州立大学在几年前对该应用程序进行了研究,他们得出的结论是,用户在四个星期的时间内显着提高了所定义的技能。 快乐 下载:iOS,Android Happify不是由应用程序开发人员设计的。 该应用程序具有由心理学,正念和认知行为疗法专家创建的独特点。 该应用程序专注于衡量您的情绪并使您快乐。 该应用程序不会产生任何糖衣,您自然会遇到糟糕的日子。 该应用程序的游戏玩法是通过智能,有趣和简单的游戏进行的,这些游戏可以分析您的情绪,情绪,感觉和大脑的整体状态。 认知度 下载:iOS,Android CogniFit致力于改善您的短期记忆。 如果您正在成为那种记不起小东西的人,在聚会上把手机丢了太多次了,则应该尝试一下此应用。 该应用程序采用了行之有效的医疗技术。 从改善普通用户的短期记忆到处理更严重的精神障碍,例如痴呆,化学烟雾,阿尔茨海默氏病,多动症和多发性硬化,CogniFit拥有了一切。 峰 下载:iOS,Android 当您下载Peak并注册时,它会询问您要提高哪些技能。 然后,它创建一个自定义算法,使您可以玩个性化游戏。 Peak可以改善您的记忆力,头脑敏捷度和类似激光的焦点。 这些游戏很简短,旨在让您在做一些艰巨的任务(例如在银行排队等)时,让大脑有短暂的能量爆发。 多林哥 下载:iOS,Android,Windows Duolingo是一款出色的应用程序,可以教您各种语言。 传统上,您只能在小时候学习语言,但Duolingo可以让您学习更多的语言,成年后可以学习尽可能多的语言。 已经证明,学习和说多种语言可以使您的大脑保持敏锐。 它被认为是最好的大脑锻炼之一。 将此应用视为您家中的私人家教。 最好的部分是该应用程序是完全免费的。

带CallKit的系统调用屏幕

集成Amazon SNS和CallKit 苹果宣布在WWDC16上开放API,以将iOS上的本机呼叫屏幕与VoIP(IP语音)应用程序配合使用。 我们曾经发送推播通知来通知用户电话。 在iOS10中,第三方应用程序还可以使用CallKit通过本机呼叫屏幕通知用户。 我将总结我对CallKit经验。 抽象 设置Amazon SNS 使用PKPushRegistry在应用程序上进行初始设置以接收VoIP推送通知。 从Amazon SNS发送VoIP推送通知 使用CallKit显示系统调用屏幕 从Amazon SNS接收VoIP推送通知 设置Amazon SNS 应用程序必须在后台才能显示系统调用屏幕。 VoIP推送通知使我们可以唤醒后台应用程序。 当收到VoIP推送通知时,确保应用程序在后台运行。 这使我们可以启动VoIP呼叫。 我没有注意到与常规推送通知和本地通知有这种区别,最终花费了大量时间。 但是,由于在我从事此工作的那一刻(2016年8月),Parse和Firebase不支持VoIP推送通知,因此我决定使用亚马逊的推送通知服务SNS。 在SNS上设置VoIP推送通知的过程与常规推送通知的过程几乎相同。 首先要做的是设置证书。 您可以像常规推送通知一样,从Apple Developer网站创建VoIP推送证书。 选择“ VoIP服务证书”,下载证书,然后导出P12文件。 其次,您需要在SNS上创建一个应用程序。 从AWS仪表板中选择SNS。 然后,选择应用程序>创建平台应用程序。 然后在配置中输入所需的信息。 应用名称:您选择的应用名称 推送通知平台:Apple开发或Apple生产 推送证书类型:VoIP推送证书 选择P12文件:选择使用来自Apple Developer网站的证书创建的VoIP推送通知P12文件。 输入密码:输入创建p12文件时指定的密码 这就是SNS设置所需的全部。 当然,您需要将此连接到服务器以进行生产。 服务器应提供一个简单的API来连接两者。 在应用程序中进行配置以接收VoIP推送通知 下一步是配置iOS项目。 选择项目文件,然后为要允许其推送通知的目标启用“功能中的后台”。 选择“ IP语音和后台提取”,以便您可以接收VoIP推送通知并在后台处理必要的步骤。 现在,我们将使用PKPushRegistry获得设备令牌。 如下所示,我们将PKPushTypeVoIP设置为PKPushRegistry实例。 您指定为代理的实例将接收与VoIP推送通知相关的回调。 在设备令牌注册视图中,您还可以添加用户数据。 您可以添加用户ID等以支持向特定设备发送推送通知。 让我们向设备发送VoIP推送通知。 选择您要发送通知的设备。 单击“ […]