2016-10-15 2 views
1

У меня есть приложение cocos2d, которое отлично работает на сетчатке iPads и iPhones, и я только что вышел и купил iPad pro, чтобы убедиться, что он работает нормально, и, конечно же, большое количество вещей отображается неправильно.setScale: метод не работает на iPad pro?

После выполнения некоторых отладки я решил, что это потому, что многие элементы имеют шкалу 0 ... Так что я сделал немного больше отладки и, например, есть одна строка в моем коде, что делает:

self.scale = 1.0f; 

Если я поставить точку останова на этой линии, а затем шаг в инкубационном функции, что мой класс наследуется от CCNode:

-(void) setScale:(float) s 
{ 
    _scaleX = _scaleY = s; 
    _isTransformDirty = _isInverseDirty = YES; 
} 

а .. затем в отладчике я смотрю на то, что Ивар _scaleX и _scaleY становятся устанавливается:

(lldb) expr s 
(float) $0 = 0 

Что?!?!?!? !!?! ?? !!?!? Как в мире 1.0 попадает в эту функцию и превращается в 0 ??? Почему iPad защищает все законы информатики?

Если бы я это сделать то же самое на сетчатке IPad или iPhone 5 или iPhone 6 или iPhone 6 плюс, масштаб 1,0, НЕ 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 

...

Я заметил, что подпись метода setScale CCNode использует тип float, а не CGFloat.

Таким образом, очевидно, что эти два типа не совпадают, поэтому архитектура iPad pro ведет себя так, чтобы обнулить ценность - странно, что это поведение происходит только на iPad, а не на сетчатке iPad, iPhone 5/6, iPhone 6+.

изменения протокола к:

@protocol MenuInteractable <NSObject> 
@property (nonatomic) float scale; 
@end 

исправили проблему.

Смежные вопросы