有谁知道UIView convertPoint:toView:和convertPoint:fromView:方法使用的算法?特别是,你知道他们是先将点转换为窗口坐标然后转换到目标视图的坐标系,还是可以采用捷径,因为"from"视图是"to"视图的祖先?
我问,因为我有一个循环,测试一个点可能有大量的视图,我想知道在循环之前将该点转换为窗口坐标是否更有效(这也有一点不用将点的视图传递到循环中以及它调用的任何内容,知道我可以为"fromView"参数传递nil或者保持相对于父视图的点.
差异可能很小,但是,因为它对我的代码没什么影响,所以我宁愿使用系统而不是反对它.
假设您有一个具有复制语义的属性.如果复制方法失败,你应该在setter中做什么?(我认为这是一种可能性,因为副本通常以alloc/init组合开始,它可能会失败并返回nil.)Apple建议返回错误代码而不是使用异常,但是setter通常具有void返回类型.推荐的方法是什么?你如何表明发生了错误?
我已经看到一些iPad应用程序填满了屏幕(例如Stanza)或者已经在状态栏下方摆角(例如,iPod播放器的顶部有方角;底部无法分辨).有谁知道这是怎么做的?
看来,默认情况下,顶级UIWindow应用了剪裁区域,因为我放置在该窗口中的任何子视图都会在这些角落中被剪掉.如果是这样的话,有没有办法摆脱这个?顺便说一句,剪辑似乎只在iPad上,而不是在我的iPod Touch上(至少,不是我在那里运行的旧操作系统版本).
跟进:我甚至以编程方式创建了UIWindow,然后将其背景设置为纯色,圆角仍然存在,确认裁剪要么在UIWindow上,要么更高.
当我尝试将@selector(xxx)与在同一源文件中实际定义的任何方法一起使用时,Xcode 4给出了(相当无用的)关于"未实现的选择器'xxx'"的错误.如果我将LLVM编译器警告"选择器的多个定义类型"设置为"否",则错误消失(至少对于项目构建).(这是iOS默认设置,但对于我的项目,它已启用.)但是,即使关闭此选项,如果在"生成设置"对话框中选中"启用实时问题",错误仍会显示在编辑器中.
所以现在我已经关闭了现场问题,以免分心,这有点让人失望.我的问题是:有没有办法可以通过指定我想要使用的选择器的哪个定义来摆脱错误?或者它应该是否重要,即方法的所有定义是否在Objective-C中共享相同的选择器?这是一个编译器错误,还是一个虚假的设置,我应该放弃?(如果是后者,为什么在新编辑器中使用实时构建功能呢?)
这是代码,只是为了清楚:
if ([recognizer respondsToSelector:@selector(translationInView:)]) {
...
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
error: unimplemented selector 'translationInView:' [-Wselector,2]
if ([recognizer respondsToSelector:@selector(translationInView:)]) {
^
Run Code Online (Sandbox Code Playgroud)
如果我用同一源文件中定义的方法替换'translationInView:',则没有错误.我已经导入了定义此方法的标头,我尝试在此源文件中的类别中声明该方法.无所谓.
我现在正在关闭警告并继续建立并继续前进,但我很想找到更好的解决方案来解决这个问题.至少,我想了解Objective-C的@selector是否具有选择方法的特定定义的语法,因为到目前为止我还没有找到任何符号.
谢谢!