setScale:方法不适用于 iPad 专业版?
setScale: method not working on iPad pro?
我有一个 cocos2d 应用程序可以在视网膜 iPads 和 iPhones 上完美运行,我刚出去购买了一个 iPad pro 以确保运行正常,果然,大量的东西显示不正确。
经过一些调试后,我确定这是因为许多元素的比例为 0...所以我进行了更多调试,例如我的代码中有一行:
self.scale = 1.0f;
如果我在该行放置一个断点,然后进入我的 class 从 CCNode 继承的 setter 函数:
-(void) setScale:(float) s
{
_scaleX = _scaleY = s;
_isTransformDirty = _isInverseDirty = YES;
}
然后..然后在调试器中我查看 _scaleX 和 _scaleY ivars 设置为:
(lldb) expr s
(float) [=13=] = 0
什么?!?!?!?!?!??!?!? 1.0 到底是如何传入这个函数并变成 0 的???为什么 iPad pro 违反计算机科学的所有定律?
如果我在视网膜 iPad 或 iPhone 5 或 iPhone 6 或 iPhone 6 plus 上做同样的事情,则比例为 1.0,而不是 0。
哇...原来是因为这个对象使用了一个协议:
// stuff...
[self.menuItems enumerateObjectsUsingBlock:^(CCNode<MenuInteractable> *menuItem, NSUInteger idx, BOOL *stop) {
maxMenuItemSize = CGSizeMake(maxMenuItemSize.width, maxMenuItemSize.height * menuItem.scale);
// more stuff..
该协议类似于:
@protocol MenuInteractable <NSObject>
@property (nonatomic) CGFloat scale;
@end
...
我注意到 CCNode 的 setScale 方法签名使用 float 类型,而不是 CGFloat。
所以显然这两种类型不匹配会导致 iPad pro 的架构以这种将值归零的方式运行——奇怪的是这种行为只发生在 iPad pro 上,而不是 iPad 视网膜,iPhone 5/6,iPhone 6+。
将协议更改为:
@protocol MenuInteractable <NSObject>
@property (nonatomic) float scale;
@end
解决了问题。
我有一个 cocos2d 应用程序可以在视网膜 iPads 和 iPhones 上完美运行,我刚出去购买了一个 iPad pro 以确保运行正常,果然,大量的东西显示不正确。
经过一些调试后,我确定这是因为许多元素的比例为 0...所以我进行了更多调试,例如我的代码中有一行:
self.scale = 1.0f;
如果我在该行放置一个断点,然后进入我的 class 从 CCNode 继承的 setter 函数:
-(void) setScale:(float) s
{
_scaleX = _scaleY = s;
_isTransformDirty = _isInverseDirty = YES;
}
然后..然后在调试器中我查看 _scaleX 和 _scaleY ivars 设置为:
(lldb) expr s
(float) [=13=] = 0
什么?!?!?!?!?!??!?!? 1.0 到底是如何传入这个函数并变成 0 的???为什么 iPad pro 违反计算机科学的所有定律?
如果我在视网膜 iPad 或 iPhone 5 或 iPhone 6 或 iPhone 6 plus 上做同样的事情,则比例为 1.0,而不是 0。
哇...原来是因为这个对象使用了一个协议:
// stuff...
[self.menuItems enumerateObjectsUsingBlock:^(CCNode<MenuInteractable> *menuItem, NSUInteger idx, BOOL *stop) {
maxMenuItemSize = CGSizeMake(maxMenuItemSize.width, maxMenuItemSize.height * menuItem.scale);
// more stuff..
该协议类似于:
@protocol MenuInteractable <NSObject>
@property (nonatomic) CGFloat scale;
@end
...
我注意到 CCNode 的 setScale 方法签名使用 float 类型,而不是 CGFloat。
所以显然这两种类型不匹配会导致 iPad pro 的架构以这种将值归零的方式运行——奇怪的是这种行为只发生在 iPad pro 上,而不是 iPad 视网膜,iPhone 5/6,iPhone 6+。
将协议更改为:
@protocol MenuInteractable <NSObject>
@property (nonatomic) float scale;
@end
解决了问题。