[英]setScale: method not working on iPad pro?
我有一個cocos2d應用程序,完美適用於視網膜iPad和iPhone,我剛出去購買iPad專業版,以確保它正常工作,果然,大量的東西顯示不正確。
在做了一些調試之后,我確定它是因為許多元素的比例為0 ...所以我做了一些調試,例如我的代碼中有一行代碼:
self.scale = 1.0f;
如果我在該行上放置一個斷點,然后進入我的類從CCNode繼承的setter函數:
-(void) setScale:(float) s
{
_scaleX = _scaleY = s;
_isTransformDirty = _isInverseDirty = YES;
}
然后..然后在調試器中我看看_scaleX和_scaleY ivars設置為:
(lldb) expr s
(float) $0 = 0
什么?!?!?!?!!?!??!!?!? 世界上如何將1.0傳遞到此函數並變為0 ??? 為什么iPad專業人士違反了計算機科學的所有法則?
如果我在視網膜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專業版的架構以這種方式表現出來的價值 - 奇怪的是這種行為只發生在iPad專業版上,而不是iPad視網膜,iPhone 5/6,iPhone 6 +。
將協議更改為:
@protocol MenuInteractable <NSObject>
@property (nonatomic) float scale;
@end
解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.