Использование OpenGL для этого было бы излишним и плохая идея. Вы потратите много времени на настройку вещей, которые уже предоставлены вам в UIViews, таких как сенсорная обработка.
Существует два способа раскладки нестандартных клавиатур на iPhone, которые я видел. Первый - создать статический UIImageView, содержащий представление всей вашей клавиатуры, захватить события касания в этом представлении и сопоставить расположение этих событий касания с тем, где находятся ваши предварительно обработанные клавиши на клавиатуре. Если пользователь нажимает одну из ваших виртуальных клавиш, вы накладываете какое-то изображение, которое показывает, что клавиша высовывается у вас, и вы обрабатываете нажатие клавиши. Я полагаю, что этот подход используется во многих приложениях калькулятора.
Альтернативный способ - настроить каждую из ваших клавиш как отдельные UIViews, расположить их в большем суперпредставлении, и каждый из них должен обработать свои сенсорные события. Это то, что я делаю в интерфейсе , показанном здесь . Нижнее меню состоит из двух подменю, и внутри подменю каждая из кнопок меню является отдельным UIViews. Их содержимое (граница, глянец и текст) отображается через Quartz, но это происходит только один раз. Поскольку эти представления имеют слоистую основу, они кэшируют нарисованный контент, анимируют и прокручивают их очень плавно. События касания запускают действие каждого пункта меню. Обратите внимание, что верхняя половина меню содержится в UIScrollView, так что вы можете прокрутить дополнительные параметры.
Моя личная рекомендация - использовать последний подход, потому что динамическое рисование клавиш пианино при запуске позволяет экспериментировать с клавишами разных размеров и форм без необходимости каждый раз переделывать свое произведение.