在大型自定义视图中快速绘图

时间:2009-02-25 15:19:45

标签: iphone cocoa-touch opengl-es uiscrollview

我正在为iPhone开发钢琴应用程序。 我想开发流畅的可滚动键盘(如音乐采样器)。

我在UIScrollView中放置了一个自定义视图(1440px x 120px)。 我想使用OpenGL因为Quartz太慢了。 但我无法在1440px中制作OpenGL视图。

任何想要更快更好的想法大尺寸自定义视图?

谢谢。

2 个答案:

答案 0 :(得分:0)

使用OpenGL会有点矫枉过正,这是一个坏主意。您将浪费大量时间设置UIViews中已经为您提供的内容,例如触摸处理。

有两种方法可以在我看到的iPhone上布置非标准键盘。第一种是创建一个静态UIImageView,它包含整个键盘的表示,捕获此视图中的触摸事件,并将这些触摸事件的位置与键盘上预呈现键的位置相匹配。如果用户点击了您的某个虚拟键,则会覆盖某种图像,该图像会显示弹出的键并处理按键。我相信这是许多计算器应用程序采用的方法。

另一种方法是将每个键设置为单独的UIView,将它们放在更大的超视图中,并让每个键都处理其触摸事件。这就是我在界面shown here中所做的。下面的菜单包含两个子菜单,在子菜单中,每个菜单按钮都是单独的UIViews。它们的内容(边框,光泽和文本)是通过Quartz渲染的,但渲染只发生一次。由于这些视图是图层支持的,因此它们会缓存其绘制的内容并动画和滚动非常流畅。触摸事件会触发每个菜单项的操作。请注意,菜单的上半部分包含在UIScrollView中,以便您可以滚动查看更多选项。

我的个人建议是使用后一种方法,因为在启动时动态绘制钢琴键可让您尝试不同的键大小和形状,而无需每次都重做您的艺术。

答案 1 :(得分:0)

UIView的任何实例的最大大小为1024x1024。如果是OpenGL则无关紧要。您可以使用大于该值的可滚动区域,但您必须从多个平铺视图构建它。