侧面带有可点击区域的 3D 可旋转立方体
Posted
技术标签:
【中文标题】侧面带有可点击区域的 3D 可旋转立方体【英文标题】:3D rotatable cube with clickable areas on sides 【发布时间】:2012-04-24 01:44:59 【问题描述】:我想要完成的是一个带有 3D 可旋转立方体的 iPad 应用程序,并且我想在立方体的每一侧定义多个区域,一旦单击这些区域就会进入另一个视图或显示一个弹出窗口。
这是否可以通过在 Xcode 中从头开始使用 OpenGL ES 来实现,或者我应该使用 3D 框架,如果可以,最简单的框架是什么? (我只听说过 Unity,而且很贵)
有没有人有一个很好的教程让我学习如何做到这一点?
我已经尝试过 3D CSS3 转换,但我想保留它作为最后的手段。
【问题讨论】:
Hit-Testing here on SO. 我无法帮助您进行命中测试,但我在此答案中链接到一些用于绘制立方体的示例代码:***.com/a/2858658/19679 【参考方案1】:试试这个代码
CATransition *transition = [CATransition animation];
transition.delegate = self;
transition.duration = 0.8;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
NSString *types[4] = @"cube", @"rippleEffect", @"cube", @"alignedCube";
NSString *subtypes[4] = kCATransitionFromTop, kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromBottom;
transition.type = types[0];
transition.subtype = subtypes[1];
[self.view.layer addAnimation:transition forKey:nil];
【讨论】:
这些转换被视为私有 API。使用它们可能会被拒绝【参考方案2】:如果您只想要一个文字 3D 立方体,您可以使用 Core Animation。查看CATransformLayer。您可以使用CATransformLayer
非常轻松地构建真正的 3D 层次结构。 Joe Ricioppo 有a cool article about this,以及一些示例代码和视频。它类似于 3D CSS3 变换,不同之处在于它更容易操作表示 3D 层次结构的单个层,而不是单独变换每个子层。最初只需旋转所有立方体面并定位它们,使它们形成一个立方体。然后你可以对变换层本身应用变换,它会做所有花哨的数学来自动变换你的子层。
最大的问题是触摸处理的工作方式。您不能在CATransformLayer
上使用-hitTest:
,因为它无法将2D 触摸映射到它自己的3D 层次结构。您也许可以安装自己的 hitTest:
实现来解决这个问题,但这几乎感觉工作比它的价值还多。我不知道 OpenGL 为 2D 到 3D 触摸转换提供了哪些条款,但这可能是您唯一的选择。
【讨论】:
我要试试这个。需要找到一种方法以某种方式使触摸起作用。非常感谢您的回答。 @blackpla9ue 运气好吗?【参考方案3】:也许不是您正在寻找的,但我们已经生成了一些在功能上可能对您有所帮助的代码: http://www.chupamobile.com/products/details/2106/Cube+Selector/
功能齐全,开箱即用
【讨论】:
以上是关于侧面带有可点击区域的 3D 可旋转立方体的主要内容,如果未能解决你的问题,请参考以下文章