我创建了一个扫雷游戏克隆游戏,我制作了一个30 x 30网格的单元格。现在在我的初始化设计中,我计划为每个单元使用UIButton,以便我可以使用它的touchDown和touchUpInside。但我的问题是使用UIButton使得游戏缩放速度变慢,尤其是在UIView中加载或添加每个单元格(900个)时。
现在我打算使用图像代替UIButton,我听说CALayer可以轻松制作动画。您能否建议我如何使用此CALayer来实现或替换UIButton?
感谢。
答案 0 :(得分:3)
我当然建议你去核心动画路线。您可以使用NSView子类来接收和处理触摸事件,然后您可以使用触摸的位置来计算被击中的单元格并适当地更新模型。
你将CALayers安排在层次结构中 - 虽然视图树的复杂性将取决于你希望拥有的其他UI元素 - 你将拥有一个包含900个子图层的CALayer。
使用Core Animation还可以让你通过动画获得动态。
它会更复杂一点,但你只需要咬紧牙关并加入Core Animation文档和/或买一本书。
祝你好运。编辑:Ivan建议使用hitTest消息。通过这种方式,您可以获取图层,告诉您哪一个被击中。使用它显然非常好。但是,如果你正在寻找速度,可能会更快地避免这种情况并将其解决。这确实假设您的游戏如何工作(即按钮/单元格不移动位置)。如果你有机会尝试两者,让我们知道它是如何工作的。 :O)
答案 1 :(得分:1)
在Cocoa桌面上,有NSCell,它是NSButton的轻量级替代品,但这是CALayer和Core Animation之前的旧技术(它们不会相互冲突)
要制作自定义按钮,请创建自定义类,或者扩展为委托CALayer。然后要知道单击了哪个按钮,请使用[hitTest]方法,该方法将返回有效点击的图层。