在Xcode 7.1 beta 1中,只有通用compact和regular大小类可用于Interface Builder和代码中.
iPad Pro会有新的尺寸等级吗?了解哪些大小类应用程序将在各种分屏设置中使用也很有趣.
我正在尝试创建一个浮动纹理来存储由片段着色器创建的渲染管道的中间结果.我需要片段的值来签名浮点数.
据我所知,所有新的iOS设备都应支持OES_texture_float扩展(即根据Apple指南从iPhone 3GS/iPod Touch 3/iPad开始).
但是,当我使用创建这样的纹理时
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_HALF_FLOAT_OES, NULL);
Run Code Online (Sandbox Code Playgroud)
启动我的应用程序并在仪器中检查它,它告诉我:
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,width,height,0,GL_RGB,GL_HALF_FLOAT_OES,NULL):(无效的枚举= 0x8d61):参数'type'的枚举无效
奇怪的是,它仍然在iPhone 4S上运行,但不适用于iPhone 4(也应该支持).但是,两个设备都会显示错误消息.但是在iPhone 4上,OpenGL无法使用此纹理作为渲染目标来构建有效的帧缓冲对象.在4S上运行得非常好.
你有什么建议我做错了吗?
谢谢!
我有一个用Objective-C编写的框架/模块,想要在Swift中测试它的外部接口和内部.为此,我在同一个项目中创建了一个新的测试目标,目标是框架.在Swift代码中,我可以导入模块并使用公共类而不会出现问题.但是,我无法访问测试中的内部类.
我尝试了以下方法:
@testable importXcode 7中尝试了Swift 2 的新功能,但这似乎对Objective-C框架没有用处.我想出的是在测试目标的桥接头中手动导入我想要测试的所有私有源.这样可行.但是,它并不觉得它是使用Swift测试Objective-C框架的预期方式.
关于如何做得更好的任何想法?
我在我现有的照片编辑应用程序中添加了一个新的iOS 8 Photo Extension.我的应用程序有一个非常复杂的过滤器管道,需要一次在内存中保留多个纹理.但是,在具有1 GB RAM的设备上,我可以轻松处理8 MP图像.
但是,在扩展中,存在更高的内存限制.我不得不将图像缩小到2 MP以下,以便在不破坏扩展名的情况下对其进行处理.我还认为只有在没有连接到扩展的调试器时才会出现内存问题.有了它,一切正常.
我做了一些实验.我修改了内存预算测试应用程序以在扩展中工作,并得出以下结果(显示崩溃前可以分配的MB的RAM数量):
??????????????????????????????????????????????????????????????
? Device ? App ? Extension ? Ext. (+Debugger) ?
??????????????????????????????????????????????????????????????
? iPhone 6 Plus (8.0.2) ? 646 ? 115 ? 645 ?
? iPhone 5 (8.1 beta 2) ? 647 ? 97 ? 646 ?
? iPhone 4s (8.0.2) ? 305 ? 97 ? 246 ?
??????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
一些观察:
现在我的问题是:我应该如何在照片编辑扩展中使用这么少的内存?一个包含8 MP(相机分辨率)RGBA图像的纹理单独吃~31 MB.如果我必须告诉用户只有在使用主应用程序时才能进行全尺寸编辑,这个扩展机制有什么意义呢?
你们其中一个人也达到了这个障碍吗?您是否找到了解决此约束的解决方案?
我正在使用a UIActivityViewController来让用户分享使用我的应用创建的照片和视频.我附加了两个UIActivityItemProviders:一个用于媒体,一个用于默认文本("Created with ...").
这适用于我测试的所有共享扩展 - 除了WhatsApp.WhatsApp只显示消息对话框中的文本 - 没有照片或视频.但是,当我将文本留空时,它将显示媒体文件.
有什么方法可以通过WhatsApp与默认文本/标题共享照片或视频吗?
我正在尝试为 3D 场景实现导航技术(在 OpenSceneGraph 中使用 OpenGL)。除其他事项外,用户应该能够点击屏幕上的场景对象以朝它移动。
导航技术应集成到另一个项目中,该项目使用顶点着色器将全局变形应用于场景几何体。这就是问题所在:由于使用顶点着色器使几何体变形,因此将鼠标光标位置取消投影到用户实际选择的地点的世界坐标并不是直接的。但是我需要这些坐标来在我的导航技术中执行正确的相机移动。
执行这种非投影的一种方法是修改顶点着色器(用于变形),让它也将顶点的原始位置和法线存储在单独的纹理中。之后可以在鼠标位置读取这些纹理以获得所需的值。
现在,正如我所说,顶点着色器属于另一个我实际上不想触及的项目。我的导航技术的一个目标是尽可能通用,以便轻松集成到其他项目中。
那么问题来了:到目前为止,OpenSceneGraph 或 OpenGL 中是否有任何我没有考虑的功能?有什么可以让我独立于顶点着色器编码器获得片段的世界坐标的吗?
我正在重构基于iOS OpenGL的渲染管道。我的管道包含许多渲染步骤,因此我需要很多中间纹理来渲染和读取。这些纹理具有各种类型(无符号字节和半浮点数),并且可能具有不同数量的通道。
为了节省内存和分配工作,我回收了管道中先前步骤使用的纹理,不再需要这些纹理。在我以前的实现中,我是自己做的。
在我的新实现中,我想使用Core Video框架提供的API。特别是因为它们提供了从CPU对纹理内存的更快访问。我知道CVOpenGLESTextureCache允许我从CVPixelBuffers中创建OpenGL纹理,可以直接创建或使用CVPixelBufferPool。但是,我找不到任何描述它们如何真正发挥作用以及如何共同发挥作用的文档。
这是我想知道的事情:
CVOpenGLESTextureCache我总是需要提供一个像素缓冲区。如果仍然需要提供内存并且无法检索旧的未使用的纹理,为什么将其称为“缓存”?CVOpenGLESTextureCacheFlush功能“目前刷新未使用的资源”。缓存如何知道资源是否“未使用”?发布相应的纹理后,纹理会返回到缓存CVOpenGLESTextureRef吗?相同的问题适用于CVPixelBufferPool。CVPixelBufferPool似乎只能管理相同大小和类型的缓冲区。这意味着我需要为我使用的每种纹理配置创建一个专用池,对吗?如果至少可以澄清其中一些问题,我将非常高兴。
从Adapting Modern Objective-C文档:
如果类提供一个或多个指定的初始值设定项,则它必须实现其超类的所有指定初始值设定项.
这意味着如果我有一个子类NSObject具有自己的指定初始化器,比如说
- (instancetype)initWithImage:(UIImage*)image NS_DESIGNATED_INITALIZER;
Run Code Online (Sandbox Code Playgroud)
那么我还需要提供NSObjects的实现-init.我应该怎么做才能将-init初始化程序标记为"无效",即没有人应该调用它而是使用它-initWithImage:?这里最好的做法是什么?
我尝试了这里描述的技术.
但是,当我在接口中标记超类-init方法时unavailable,编译器仍然告诉我需要覆盖超类的初始化器.
当我尝试其他技术,即引发异常或调用-doesNotRecognizeSelector:内部时-init,我收到一条错误,指出我需要调用我指定的初始化程序之一.
我目前正在使用CUDA 5.0中引入的新CUDA动态并行(CDP)功能.我选择了N-queens拼图作为树木搜索算法的一个例子,它具有很高的工作不平衡性,在我看来,这可能会受益于CDP.
我的方法大致如下:对于给定的板配置(在第一行中已经放置了一定数量的皇后的棋盘),我启动了一个具有多个线程的内核.每个线程在给定配置下尝试子树的一个可能分支,直到给定的最大值.深度.如果分支的保留仍然表示有效配置,则该线程生成一个子网格线程,该子网格搜索子树,然后基于该配置.发现其配置无效(两个或多个皇后可能互相攻击)的线程将终止.如果一个线程成功地将最后一个皇后放置在板上,它会增加解决方案计数器.
在启动内核之前,我预先计算CPU上的一些电路板配置,然后为每个配置启动一个网格.
现在问题:我发现我的解决方案明显慢于另一个不使用CDP的CUDA实现.所以我启动了Nsight剖析器来找到原因.这是我的第一个结果(对于N = 10):

显然GPU并未完全占用.所以我想我需要使用不同的流来启动子网格,以防止它们相互等待.以下是为每个子网格启动使用新流时的分析结果:

这看起来更密集(并且更快),但我仍然不太明白这种模式的原因.为什么在一些发布之间会有这么多的噱头(特别是在最后)?
但它变得更加奇怪.当我将N(以及工作负载)增加到13时,模式如下所示:

有人知道CDP如何在内部运作吗?我还没有考虑任何隐含的同步障碍吗?或者我在读取分析器输出错误?我特别好奇这一个线程在最后一种情况下跨越几乎整个执行时间的情况.
我也没有找到有关CDP输出的Nsight Visual Profiler的任何文档.关于Nsight在那里展示什么的任何好的参考也会有所帮助.
谢谢!
iOS 8 Apple引入了用于处理应用程序布局的大小类.不是根据设备,屏幕大小和方向设计用户界面,而是鼓励开发人员根据活动大小类调整其应用程序的布局.我认为这是一个很好的举动.
然而,当涉及到iPad时,似乎没有办法区分不同的设备方向(在我看来,它提供了截然不同的屏幕空间和处理).从人机界面指南:
如果我只想以横向方式呈现侧边菜单,我现在该怎么办,因为它提供了更多的空间,比如UISplitViewController?
是UISplitViewController另一种情况下苹果也不吃它自己的狗食和使用了一些其他指标,如设备的方向或实际屏幕宽度来确定布局?或者还有另一种官方方式吗?在没有代码的情况下,我可以在Interface Builder中做些什么?
(不,我不想UISplitViewController因为几个原因而使用.)
我想从应用程序的收据中阅读原始应用程序版本.
在开发过程中,应用程序不包含收据,因为它没有从商店安装.我需要开始一个SKReceiptRefreshRequest以获得沙盒收据.但这会提示用户登录.
所以这就是问题:如果应用程序是从生产中的商店下载的,它是否保证包含收据?因为如果不是,我需要启动刷新请求,这会提示用户输入凭据.如果没有上下文,我不想这样做.
如果它不可用,这个案例的最佳做法是什么?纳入SKReceiptRefreshRequest"恢复购买"程序?
PS:该应用仅适用于iOS 9+.
我目前采用的是暗模式,我发现在iOS 12中运行该应用程序时,也可以在Interface Builder 中使用像systemBackground和这样的新系统颜色。 13光模式。因此很明显,运行时以某种方式将这些颜色转换为iOS 12。label
有谁知道引擎盖下会发生什么以及是否有方便的方法可以在代码中实现相同目的?