проблемы с точками привязки с CCUIViewWrapper

У меня возникли некоторые проблемы с пониманием и использованием anchorPoint. Насколько я понимаю, привязкой по умолчанию является (.5,.5), которая применяет преобразования относительно центра объектов. Однако, когда я поместил UIButton в CCUIViewWrapper, я заметил, что масштабирование будет масштабироваться относительно правой стороны объекта (т. е. если я масштабировал от 0 до 1, он будет расти справа налево) .

Я не был уверен, что с этим делать, но, поработав, обнаружил, что мне нужно настроить точку привязки на (0,0), чтобы масштабирование происходило вокруг центра объекта. Почему это произошло?

Более того, хотя я ожидаю, что якорь будет нижним слева от объекта, потому что Cocos2d ориентирован снизу слева для (0,0), это не так и фактически выровнено по верху. слева со значением позиции моей оболочки.

В конце концов, для масштабирования относительно центра нужно было сделать опорную точку (0,0) и расположить оболочку, используя верхний левый угол объекта, почти так, как если бы он использовал координаты UIView для размещения объекта. Я не уверен, что такое поведение происходит строго с обернутыми UIViews в CCUIViewWrappers, и я не знаю, является ли это просто правильным поведением, и я совершенно неправильно его понимаю.

Может кто разъяснит и объяснит?


person Joey    schedule 04.10.2010    source источник


Ответы (2)


У меня была аналогичная проблема с оберткой. Одна из проблем здесь заключается в том, что оболочка прикрепляет представление к корневому окну, а не к представлению OpenGL директора, что означает, что оно не будет учитывать автоповорот, который использует представление OpenGL. Код выглядит так, как будто он пытается компенсировать разницу между координатами UIView и Cocos2d, но, похоже, не делает этого должным образом, когда дело доходит до точек привязки. В конце концов я просто использовал координаты UIView, но я поэкспериментировал с альтернативным методом установки точки привязки, используя:

uiItem.center = ccp((self.anchorPoint.x - 0.5f) * self.contentSize.width, (self.anchorPoint.y - 0.5f) * self.contentSize.height);

В начале метода updateUIViewTransform в CCUIViewWrappers перед установкой преобразования представления. Это заставляет точки привязки вести себя так, как ожидалось, по крайней мере, для представлений, прикрепленных непосредственно к слою.

person JtM    schedule 03.06.2011

Вместо того, чтобы использовать:

uiItem.center = ccp((self.anchorPoint.x - 0.5f) * self.contentSize.width, (self.anchorPoint.y - 0.5f) * self.contentSize.height);

который установил точку привязки в правом нижнем углу, я использовал:

uiItem.center = ccp(-uiItem.bounds.size.height/2, uiItem.bounds.size.width/2);

который установил его в центр.

Причина, по которой x и y перевернуты, я предполагаю, что мой элемент повернут на 90.

person Shikima    schedule 03.11.2011