簡體   English   中英

setScale:方法不適用於iPad專業版?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM