小编Ada*_*dam的帖子

使用Xcode和SDK 4+构建胖静态库(设备+模拟器)

从理论上讲,我们可以构建一个包含模拟器,iPhone和iPad的静态库.

但是,Apple没有关于此的文档,我可以找到,并且Xcode的默认模板未配置为执行此操作.

我正在寻找一种可以在Xcode中完成的简单,可移植,可重用的技术.

一些历史:

  • 在2008年,我们曾经能够制作包含sim和设备的单个静态库.Apple禁用了那个.
  • 在整个2009年,我们制作了一对静态库 - 一个用于sim,一个用于设备.Apple现在也禁用了它.

参考文献:

  1. 这是一个好主意,它是一种很好的方法,但它不起作用:http://www.drobnik.com/touch/2010/04/universal-static-libraries/

    • 他的脚本中有一些错误意味着它只适用于他的机器 - 他应该使用BUILT_PRODUCTS_DIR和/或BUILD_DIR而不是"猜测"它们)
    • Apple的最新Xcode阻止你做他做的事情 - 由于Xcode处理目标的方式(记录)改变,它根本不起作用)
  2. 另一个提问者询问如何在不使用xcode的情况下执行此操作,以及专注于arm6与arm7部分的响应 - 但忽略了i386部分:如何为armv6,armv7和i386编译静态库(fat)

    • 由于Apple的最新变化,模拟器部分与arm6/arm7的区别不再相同 - 这是一个不同的问题,见上文)

iphone xcode

279
推荐指数
6
解决办法
13万
查看次数

在NIB/XIB文件中设置视图大小

在Xcode 4中,有一个永远不会修复的错误,Xcode阻止你调整视图大小(一些愚蠢的"设计功能") - 你必须确保你之前将所有topbar/statusbar/navbar/tabbar设置为"none"它会解锁控件.

XCode 5似乎已经采取了这个错误......并扩展了它!

现在完全不可能在NIB/XIB文件中编辑UIView的大小.我所做的一切都没有区别,尺寸总是只读.我真的,真的不想写源代码(这样我们的NIB +故事板现在总是看起来总是错误)来解决这个bug,但我找不到任何其他方法.

有人在Xcode中找到了一个workaroind吗?

nib ios xcode5

42
推荐指数
2
解决办法
2万
查看次数

什么是AWDL(Apple Wireless Direct Link)以及它是如何工作的?

我试图找出AWDL是什么.在iOS上,如果您通过BlueTooth使用Apple的点对点网络,Apple似乎会创建一个新的网络接口"awdl0"来实现(我猜)IP-over-BT.

但是我找不到关于这个技术或这个界面的任何文档,它的行为方式,我们必须/不能用它做的事情等等.谷歌出现了空白:(.

特别是,我认为它意味着"建立了一个BT连接,我正在顶层运行一个IP桥接器,你可以用它来进行点对点通信".Apple自己的系统库存在错误,这种桥的设置速度不够快,如果过早发送数据,它似乎会被操作系统删除.所以...如果我可以查询这个awdl0,我希望检查"你准备好了吗?" 并延迟P2P消息,直到操作系统开心.


UPDATE

更多信息:我可以获得成对的iOS设备来创建彼此的awdl0连接 - 但它们永远不会被创建到OS X机器,无论BT和Bonjour是否打开,设备是否配对.


一些背景:

在iOS5中,Apple永久禁用了Bonjour/Peer-to-peer网络的蓝牙部分,并发布了一个技术说明,指示每个人如果想继续使用蓝牙作为iOS设备之间的传输,则使用DNS-SD.这很好,但这意味着如果你想要高性能的BT,你必须使用DNS-SD,并且你希望它可靠.

(GameKit 有时可以正常工作,但我们经常会在现实场景中看到糟糕的表现,例如拥挤的公共场所 - 如果您使用DNS-SD就会消失)

DNS-SD协议不包含告诉您硬件使用的信息.但它确实告诉你网络接口(这就是我知道我们在awdl0上运行的方式)

DNS-SD非常棒,我们在iOS设备之间进行点对点的高速,低延迟连接 - 所有GameKit承诺的东西,但是当范围内有多个wifi/BT设备时,它们往往无法提供.

bluetooth ios

33
推荐指数
2
解决办法
5万
查看次数

"[copy copyWithZone:]:无法识别的选择器发送到实例时"使用Bindings/Core Data时

(自我询问和自我回答,因为我花了几个小时在网上寻找这个,大多数资源都说"我最终解决了它"而没有给出解释)

我有一个非常简单的Core Data + Bindings应用程序:

  • NSArrayController从Core Data中提取项目
  • NSTableView渲染它们
  • 另一个NSTableView,当您单击第一个表中的行时,显示该项的详细信息

上面的第3项导致应用程序崩溃,错误如下:

[(my NSManagedObject) copyWithZone:]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)

实现该方法(!)并在那里放置一个断点,我发现它是由Apple的NSCell类调用的 - 这没有多大帮助:(.

cocoa core-data cocoa-bindings nsmanagedobject

30
推荐指数
3
解决办法
2万
查看次数

Xcode4显示所有输出(删除"仅显示前200条通知")

新的错误Apple添加到Xcode4最新版本:如果有超过200行输出,则全部删除.

显然,如果有输出,那是有原因的,我需要看到它:(.

我试图寻找偏好,GUI或按钮,但找不到任何东西.

当然他们没有硬编码,以防止你看到自己的输出?:)

xcode

24
推荐指数
2
解决办法
4646
查看次数

OpenGLES 2中的文本/字体渲染(iOS - CoreText?) - 选项和最佳实践?

关于OpenGL字体渲染有很多问题,其中许多问题都是由纹理图集(快速但错误)或字符串纹理(仅限固定文本)所满足.

然而,这些方法很差,似乎已经过时了(使用着色器更好/更快地做到这一点怎么样?).对于OpenGL 4.1,有一个很好的问题,看看"你今天应该使用什么?":

从版本4.1开始,OpenGL中的文本渲染技术是什么?

那么,今天我们应该在iOS GL ES 2上使用什么?

我很失望,似乎没有开源(甚至是商业解决方案).我知道有很多团队把它搞砸了,花了几周的时间重新发明这个轮子,逐渐学习如何克服和空间等(呃) - 但必须有一个比重写整个"字体"更好的方法从头开始?


据我所知,这有两个部分:

  1. 我们如何使用字体渲染文字?
  2. 我们如何显示输出?

对于1(如何渲染),Apple提供了许多方法来获得"正确的"渲染输出 - 但"简单"的方法不支持OpenGL(也许其他一些方式 - 例如是否有一种简单的方法来映射CoreText输出到OpenGL?).

对于2(如何显示),我们有着色器,我们有VBO,我们有字形纹理,我们有查找纹理,以及其他tecniques(例如上面链接的OpenGL 4.1内容?)

以下是我所知道的两种常见的OpenGL方法:

  1. 纹理图集(渲染所有字形一次,然后从共享纹理渲染每个字符1 x纹理四边形)
    1. 这是错误的,除非你使用20世纪80年代的"位图字体"(即便如此:纹理图集需要比看似更多的工作,如果你需要它更正确的非平凡字体)
    2. (字体不是"字形的集合",有大量的定位,布局,包装,间距,字距,样式,着色,加权等.纹理图集失败)
  2. 固定字符串(使用任何Apple类正确渲染,然后截取背景图像数据,并上传为纹理)
    1. 从人的角度来说,这很快.在帧渲染中,这非常非常慢.如果您使用大量更改文本执行此操作,则帧速率会在整个范围内显示
    2. 从技术上讲,它大多是正确的(不完全是:你以这种方式丢失了一些信息)但效率极低

我也看过,但听到了好的和坏的事情:

  1. Imagination/PowerVR"Print3D"(链接坏了)(来自制造GPU的人!但是他们的网站移动/删除了文本渲染页面)
  2. FreeType(需要预处理,解释,大量代码,额外的库?)
  3. ...和/或FTGL http://sourceforge.net/projects/ftgl/(谣言:慢?错误?很长时间没有更新?)
  4. 字体存储http://digestingduck.blogspot.co.uk/2009/08/font-stash.html(高质量,但非常慢?)
  5. 1.

在Apple自己的OS /标准库中,我知道几种文本呈现源.注意:我已经在2D渲染项目中详细使用了大部分这些,我关于它们输出不同渲染的陈述是基于直接经验

  1. CoreGraphics与NSString
    1. 最简单的:渲染"进入CGRect"
    2. 似乎是人们推荐的"固定字符串"方法的稍微快一点的版本(即使你期望它大致相同)
  2. UILabel和UITextArea用纯文本
    1. NB:他们不一样!他们如何渲染smae文本略有不同
  3. NSAttributedString,呈现给上面的一个
    1. 再次:渲染方式不同(我所知道的差异相当微妙并被归类为"错误",关于此的各种SO问题)
  4. CATextLayer
    1. iOS字体和旧C渲染之间的混合体.使用"不完全"免费桥接的CFFont/UIFont,它揭示了一些更多的渲染差异/陌生感
  5. CoreText
    1. ......最终的解决方案?但是它自己的野兽......

fonts core-animation opengl-es core-text ios

18
推荐指数
1
解决办法
6876
查看次数

设置新创建的CAShapeLayer的正确框架

简而言之:

  1. Apple没有自动设置frameboundsCAShapeLayer(并且Apple未实现等效[UIView sizeThatFits])
  2. 如果使用路径边界框的大小设置框架......一切都会出错.无论你如何设置它,它都会搞砸道路

那么,什么是编程设定的新创建的框架的正确方法CAShapeLayer与新添加的CGPath?Apple的文档在此事上保持沉默.

我尝试过的东西,不起作用:

  1. 创建一个 CAShapeLayer
  2. 创建一个CGPath,将其添加到图层
  3. 检查图层frame- 它是{{0,0},{0,0}}
  4. 组: layer.frame = CGPathGetBoundingBox( layer.path )
  5. 帧现在是正确的,但路径现在是DOUBLE偏移 - 改变frame路径有效地移动一个额外的(x,y)像素

  6. 组: layer.bounds = CGPathGetBoundingBox( layer.path )

  7. ......一切都疯了.没有任何意义了
  8. 尝试修复它 layer.position = CGPathGetBoundingBox( layer.path ).origin
  9. ...没有骰子; 仍然坚果.

有一件事我尝试过DID可以工作,但会导致其他地方出现问题:

编辑:一旦您自动旋转屏幕,这个BREAKS.我的猜测:Apple的自动旋转需要控制"转换"属性.

  1. 创建一个 CAShapeLayer
  2. 创建一个CGPath,将其添加到图层
  3. 检查图层的框架 - 它是 {{0,0},{0,0}}
  4. 组: layer.frame = CGPathGetBoundingBox( layer.path )
  5. 组: layer.transform = CGAffineTransformMakeTranslation( CGPathGetBoundingBox( …

calayer cashapelayer cgpath

16
推荐指数
1
解决办法
4117
查看次数

正确的loadView实现

Apple的文档没有说明loadView的正确实现.

我发现如果你像这样实现loadView:

- (void)loadView
{
    self.view = [[UIView alloc] init];
}
Run Code Online (Sandbox Code Playgroud)

...然后你会得到不同的行为,而不是你根本没有实现它.特别是,在一个20行的项目中,我发现viewWillAppear被调用为self.view的零大小框架 - 除非你使用Apple的默认版本的loadView.

在Google上看,有很多"教程"提供了明显错误的loadView实现 - 例如强制设置大小为(320,480),因为教程作者"发现它可行,如果我这样做".

我想知道正确的实现应该是什么.

注意:在上面的例子中,我将它添加到AppDelegate中的视图层次结构中,如下所示:

[self.window addSubview:(UIViewController*).view];
Run Code Online (Sandbox Code Playgroud)

我相信,在存在UINavigationController或UITabBarController的情况下,Apple会做一些额外的魔术 - 作为副作用 - 导致单行loadView实现正常工作.但是我想写得正确,所以它总能奏效!

注意:我已尝试在根视图上设置自动调整掩码,但它不会改变发生的情况:

- (void)loadView
{
    self.view = [[UIView alloc] init];
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller uiview ios

14
推荐指数
2
解决办法
1万
查看次数

在OpenGL ES中绘制一个非常高分辨率的纹理对象(球体)

我在OpenGL ES中绘制行星,并遇到一些有趣的性能问题.一般的问题是:如何最好地在球体上渲染"非常详细"的纹理?

(球体有保证;我对球体特定的优化感兴趣)

基本情况:

  • 窗口约.2048 x 1536(例如iPad3)
  • 地球的纹理贴图是24,000 x 12,000像素(面积是美国的一半,适合屏幕的整个宽度)
  • 从放大(美国填充屏幕)到缩小(全球可见)的所有内容都显示地球
  • 我需要最少3个纹理层(1个用于行星表面,1个用于日/夜差异,1个用于用户界面(hilighting不同区域)
  • 一些图层是动画的(即它们必须在运行时快速加载和删除纹理)

限制:

  • 顶级平板电脑限制为4096x4096纹理
  • 顶级平板电脑限于8个同步纹理单元

问题:

  • 总的来说,这是天真的500万像素的纹理数据
  • 分割成较小的纹理不能很好地工作,因为设备只有8个单位; 只有一个纹理图层,我可以分成8个纹理单元,所有纹理都小于4096x4096 - 但这只允许单个图层
  • 将图层渲染为单独的几何图形效果很差,因为它们需要使用片段着色器进行混合

......目前,我认为唯一可行的想法是:

  1. 将球体分成NxM"球体块"并将每个球体渲染为单独的几何体
  2. 缩小时使用mipmap来渲染低分辨率纹理
  3. ...在放大时依靠简单的剔除来切除大部分内容,并且在无法剔除时使用小(呃)纹理进行mipmapping

......但似乎应该有更简单的方法/更好的选择?

opengl-es ios

10
推荐指数
1
解决办法
887
查看次数

剪切CALayer.shadow创建的阴影

我想在HOLLOW CGPath的OUTSIDE边缘附近添加一个阴影(这两个词是关键的:外部+空心:)).

Apple的阴影实现只允许你做"填充"的阴影.

那么...如何剪掉阴影本身的内部?如果它是一个渲染调用,我会调用CGContextSetClip*方法将它剪辑到我想要的位置......但我看不出你是如何得到它的,因为它既不是渲染调用,也不是CALayer本身.

(Apple的一个不幸结果是"隐藏"它作为一组魔法变量,我猜?)

注意:这只是iOS - 在Mac上的IIRC可以直接访问用于创建阴影的滤镜,因此您可以手动创建自己的(任意)阴影.


更新:

我研究了如何剪辑以仅显示阴影的INNER部分:设置"layer.mask",将其作为当前图层的克隆(即相同路径)的新图层,并将路径fillcolor设置为全alpha.

这与我正在尝试的相反,所以如果我能找到一种方法让掩码层翻转alpha(0变为1,1变为0),我会在那里......

core-graphics calayer ios

9
推荐指数
1
解决办法
2548
查看次数