我在理解和使用anchorPoint时遇到了一些问题。据我了解,默认锚点是(.5,.5),它应用关于对象中心的变换。然而,当我将UIButton放入CCUIViewWrapper时,我注意到缩放它会缩放对象的 right 侧(即如果我从0缩放到1,它将从右向左增长)
我不知道该怎么做,但是修补后发现我必须将锚点调整到(0,0)以便在对象的中心进行缩放。为什么会这样?
此外,虽然我希望使锚点成为对象左侧的 bottom ,因为Cocos2d的左下方为(0,0),但它没有并且实际上对齐了< em> top 留下我的包装器的位置值。
最后,对中心进行缩放的是制作锚点(0,0)并使用对象的左上角定位包装器,就像使用UIView坐标放置对象一样。我不确定这种行为是否是在CCUIViewWrappers中严格包含UIViews的事情,我也不知道这是否只是正确行为而且我完全误解了它。
有人可以澄清和解释吗?
答案 0 :(得分:1)
我的包装器遇到了类似的问题。这里的一个问题是包装器将视图附加到根窗口而不是导向器的OpenGL视图,这意味着它不会尊重OpenGL视图使用的任何自动旋转。代码看起来正在尝试补偿UIView和Cocos2d坐标之间的差异,但是当涉及到锚点时似乎没有做到这一点。我最后只是使用了UIView坐标,但我确实尝试了另一种使用以下方法设置锚点的方法:
uiItem.center = ccp((self.anchorPoint.x - 0.5f) * self.contentSize.width, (self.anchorPoint.y - 0.5f) * self.contentSize.height);
在设置视图转换之前,在CCUIViewWrappers中的updateUIViewTransform方法开始时。这使锚点的行为符合预期,至少对于直接附加到图层的视图而言。
答案 1 :(得分:0)
而不是使用:
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.