Обновление с примером исходного кода:
Вот пример готового исходного кода (на самом деле это полностью заархивированный проект Xcode с файлами изображений и перьев и небольшим количеством исходного кода), не для iPhone, не с использованием Core Animation, просто с помощью пары простых NSImages и NSImageView. Это просто дешевый хак, он не реализует всю функциональность, которую вы запрашивали (извините, но мне не хочется писать ваш исходный код для вас :-P), ужасное расположение кода (эй, я просто взломал это вместе в пару минут, так что вы не можете ожидать лучшего ;-)) и это просто демонстрация того, как это можно сделать. Это также можно сделать с помощью Core Animation, но этот подход проще. Составление анимации кнопки в NSImageView не так хорошо, как создание подкласса NSView и непосредственное рисование в его контексте, но это намного проще (я просто хотел собрать самое простое из возможных решений). Он также не будет прокручиваться назад после прокрутки вправо. Для этого вам просто нужен другой метод, чтобы прокрутить назад и запустить еще один NSTimer, который срабатывает через 2 секунды после того, как вы нарисовали точки слева.
Просто откройте проект в Xcode и нажмите Run, это все, что нужно сделать. Тогда взгляните на исходный код. Это действительно не так сложно (однако, вам, возможно, придется сначала переформатировать его, компоновка отстой).
Обновление из-за комментария к моему ответу:
Если вы вообще не используете элементы пользовательского интерфейса Apple, я не вижу проблемы. В этом случае ваша кнопка даже не кнопка, это просто интерактивный вид (NSView, если вы используете Какао). Вы можете просто подкласс NSView как MyAnswerView и перезаписать метод рисования, чтобы рисовать в виде, что вы хотите. Многострочный текст, прокрутка текста, трехмерный анимированный текст - это полностью ваше воображение.
Вот пример , показывающий, как кто-то подклассифицировал NSView для создания полного пользовательского элемента управления, который не существует по умолчанию. Элемент управления выглядит следующим образом:
Видите забавную вещь в левом верхнем углу? Это контроль. Вот как это работает:
Мне неприятно это говорить, поскольку это не ответ на ваш вопрос, но " Не делайте этого! ". У Apple есть рекомендации по реализации пользовательского интерфейса. Хотя вы можете свободно их игнорировать, пользователи Apple привыкли, что пользовательские интерфейсы следуют этим рекомендациям, и если они не будут следовать им, то будут создаваться приложения, которые пользователи Apple находят уродливыми и мало привлекательными.
Вот рекомендации Apple по человеческому интерфейсу
Позвольте мне процитировать оттуда
Содержание кнопки и маркировка
Кнопка всегда содержит текст, это
не содержит изображения. Если тебе надо
чтобы отобразить значок или другое изображение на
кнопку, используйте вместо кнопки скоса,
описано в «Кнопках наклона».
Метка на кнопке должна быть
глагол или глагол фраза, которая описывает
действие, которое он выполняет - Сохранить, Закрыть, Распечатать,
Удалить, изменить пароль и т. Д. Если
кнопка действует на один
настройка, пометить кнопку как
конкретно, насколько это возможно; "Выберите
Изображение… », например, больше
полезно, чем «Выбрать…», потому что кнопки
начать немедленное действие, это
не должно быть необходимости использовать «сейчас»
(Сканирование сейчас, например) в метке.
Метки кнопок должны иметь
заглавная буква, как
описано в «Капитализация
Метки элементов интерфейса и текст ». Если
кнопка сразу открывается
другое окно, диалог или приложение
чтобы выполнить свое действие, вы можете использовать
многоточие на этикетке. Например,
Настройки почты отображают push
кнопка с многоточием
потому что он открывает .Mac систему
предпочтения, как показано на рисунке 15-8.
кнопки должны содержатьодин глагол или глагольная фраза, а не ответы на пустяковые игры! Если у вас есть от 2 до 5 ответов, вы должны использовать радиокнопки, чтобы пользователь выбрал ответ, и кнопку OK, чтобы пользователь принял ответ. Для более чем 5 ответов вам следует рассмотреть возможность выбора всплывающих окон в соответствии с рекомендациями, хотя, думаю, в этом случае это будет довольно уродливо.
Вы могли бы рассмотреть возможность использования таблицы только с одним столбцом, одной строкой на ответ, и каждая ячейка должна быть многострочной, если ответ очень длинный и должен быть разбит. Таким образом, пользователь выбирает строку таблицы, нажимая на нее, которая выделяет ячейку таблицы, а затем нажимает кнопку ОК, чтобы закончить. В качестве альтернативы, вы можете продолжить напрямую, как только пользователь выберет любую ячейку таблицы (но таким образом вы пользуетесь любым шансом исправить случайный щелчок). С другой стороны, таблицы с многострочными ячейками довольно редки в MacOS X. В iPhone их используют, но обычно с очень небольшим количеством текста (максимум две строки).