Простой способ прокрутки текста переполнения на кнопке? - PullRequest
2 голосов
/ 29 сентября 2008

Есть ли у кого-нибудь примеры или ресурсы, где я мог бы найти информацию о прокрутке текста, которая слишком длинна для отображения в кнопке? Я думаю что-то в этом роде.

  • Отображение как можно большего количества текста в текущем прямоугольнике с символом «...» в конце для обозначения переполнения.
  • Пауза, скажем, на 1 секунду, затем медленно прокрутите текст к правому краю, отображая правую часть строки.
  • Показывать, сколько текста поместится в текущем прямоугольнике с символом «...» в начале для обозначения переполнения.
  • Начни все сначала, наоборот.

Существует ли простой способ сделать это с помощью «базовых» или встроенных «анимационных» фреймворков на определенном мобильном устройстве?

[править] Я хотел бы добавить еще некоторые детали, так как я думаю, что люди больше сосредоточены на том, не уместно ли то, чего я пытаюсь достичь. Кнопка предназначена для ответов на викторины. Он не выполняет какой-либо конкретной функции пользовательского интерфейса, но предназначен для отображения ответа. Сами Apple делает это в своей простой игре iQuiz на iPod Nano, и я думаю, что это довольно элегантное решение для ответов, длина которых превышает ширину моей кнопки.

В случае, если это «...», это трудная часть этого. Допустим, я снял это требование. Могу ли я иметь метку для кнопки в натуральную величину, но обрезать ее до клиентского прямоугольника кнопки и использовать некоторые методы анимации для прокрутки ее внутри прямоугольника обрезки? Это дало бы мне почти такой же эффект без эллипсов.

Ответы [ 5 ]

2 голосов
/ 01 октября 2008

Вот идея: вместо эллипсов (...) используйте градиент с каждой стороны, чтобы дополнительный текст исчезал в цвет фона. Тогда вы можете сделать это с тремя слоями CALay: один для текста и два для эффекта затухания.

Маски затухания будут просто прямоугольниками с градиентом, который переходит от прозрачного к цвету фона. Они должны быть расположены над текстовым слоем. Текст будет нарисован на текстовом слое, а затем вы просто анимируете его, скользя взад-вперед так, как вы его описываете. Вы можете создать объект CGPath, описывающий путь, и добавить его к объекту CAKeyframeAnimation, который вы добавляете в текстовый слой.

Что касается того, считаете ли вы, что это «легко», зависит от того, насколько хорошо вы знаете Core Animation, но я думаю, что, изучив API, вы обнаружите, что это не так уж плохо и будет стоить проблем.

2 голосов
/ 29 сентября 2008

Обновление с примером исходного кода:

Вот пример готового исходного кода (на самом деле это полностью заархивированный проект Xcode с файлами изображений и перьев и небольшим количеством исходного кода), не для iPhone, не с использованием Core Animation, просто с помощью пары простых NSImages и NSImageView. Это просто дешевый хак, он не реализует всю функциональность, которую вы запрашивали (извините, но мне не хочется писать ваш исходный код для вас :-P), ужасное расположение кода (эй, я просто взломал это вместе в пару минут, так что вы не можете ожидать лучшего ;-)) и это просто демонстрация того, как это можно сделать. Это также можно сделать с помощью Core Animation, но этот подход проще. Составление анимации кнопки в NSImageView не так хорошо, как создание подкласса NSView и непосредственное рисование в его контексте, но это намного проще (я просто хотел собрать самое простое из возможных решений). Он также не будет прокручиваться назад после прокрутки вправо. Для этого вам просто нужен другой метод, чтобы прокрутить назад и запустить еще один NSTimer, который срабатывает через 2 секунды после того, как вы нарисовали точки слева.

Просто откройте проект в Xcode и нажмите Run, это все, что нужно сделать. Тогда взгляните на исходный код. Это действительно не так сложно (однако, вам, возможно, придется сначала переформатировать его, компоновка отстой).


Обновление из-за комментария к моему ответу:

Если вы вообще не используете элементы пользовательского интерфейса Apple, я не вижу проблемы. В этом случае ваша кнопка даже не кнопка, это просто интерактивный вид (NSView, если вы используете Какао). Вы можете просто подкласс NSView как MyAnswerView и перезаписать метод рисования, чтобы рисовать в виде, что вы хотите. Многострочный текст, прокрутка текста, трехмерный анимированный текст - это полностью ваше воображение.

Вот пример , показывающий, как кто-то подклассифицировал NSView для создания полного пользовательского элемента управления, который не существует по умолчанию. Элемент управления выглядит следующим образом:

alt text

Видите забавную вещь в левом верхнем углу? Это контроль. Вот как это работает:

alt text


Мне неприятно это говорить, поскольку это не ответ на ваш вопрос, но " Не делайте этого! ". У Apple есть рекомендации по реализации пользовательского интерфейса. Хотя вы можете свободно их игнорировать, пользователи Apple привыкли, что пользовательские интерфейсы следуют этим рекомендациям, и если они не будут следовать им, то будут создаваться приложения, которые пользователи Apple находят уродливыми и мало привлекательными.

Вот рекомендации Apple по человеческому интерфейсу

Позвольте мне процитировать оттуда

Содержание кнопки и маркировка

Кнопка всегда содержит текст, это не содержит изображения. Если тебе надо чтобы отобразить значок или другое изображение на кнопку, используйте вместо кнопки скоса, описано в «Кнопках наклона».

Метка на кнопке должна быть глагол или глагол фраза, которая описывает действие, которое он выполняет - Сохранить, Закрыть, Распечатать, Удалить, изменить пароль и т. Д. Если кнопка действует на один настройка, пометить кнопку как конкретно, насколько это возможно; "Выберите Изображение… », например, больше полезно, чем «Выбрать…», потому что кнопки начать немедленное действие, это не должно быть необходимости использовать «сейчас» (Сканирование сейчас, например) в метке.

Метки кнопок должны иметь заглавная буква, как описано в «Капитализация Метки элементов интерфейса и текст ». Если кнопка сразу открывается другое окно, диалог или приложение чтобы выполнить свое действие, вы можете использовать многоточие на этикетке. Например, Настройки почты отображают push кнопка с многоточием потому что он открывает .Mac систему предпочтения, как показано на рисунке 15-8.

кнопки должны содержатьодин глагол или глагольная фраза, а не ответы на пустяковые игры! Если у вас есть от 2 до 5 ответов, вы должны использовать радиокнопки, чтобы пользователь выбрал ответ, и кнопку OK, чтобы пользователь принял ответ. Для более чем 5 ответов вам следует рассмотреть возможность выбора всплывающих окон в соответствии с рекомендациями, хотя, думаю, в этом случае это будет довольно уродливо.

Вы могли бы рассмотреть возможность использования таблицы только с одним столбцом, одной строкой на ответ, и каждая ячейка должна быть многострочной, если ответ очень длинный и должен быть разбит. Таким образом, пользователь выбирает строку таблицы, нажимая на нее, которая выделяет ячейку таблицы, а затем нажимает кнопку ОК, чтобы закончить. В качестве альтернативы, вы можете продолжить напрямую, как только пользователь выберет любую ячейку таблицы (но таким образом вы пользуетесь любым шансом исправить случайный щелчок). С другой стороны, таблицы с многострочными ячейками довольно редки в MacOS X. В iPhone их используют, но обычно с очень небольшим количеством текста (максимум две строки).

2 голосов
/ 29 сентября 2008

Не желая быть тупым, возможно, вам следует переосмыслить свою проблему. Кнопка должна иметь четкую и предсказуемую функцию. Это не место для хранения и отображения текста. Возможно, вы могли бы показать описание на экране с хорошей стандартной кнопкой ниже?

0 голосов
/ 29 сентября 2008

Это не очень хорошая практика пользовательского интерфейса, но если вы все еще хотите это сделать, лучше всего сделать это с помощью интерактивного элемента управления, стилизованного под кнопку.

Установите для ширины div явное значение, а для его переполнения - скрытое, затем используйте скрипт, выполняющийся с интервалом, для настройки свойства scrollLeft этого div.

0 голосов
/ 29 сентября 2008

Уверен, что вы не можете сделать это с помощью стандартного API, конечно же, не с UILineBreakMode. Кроме того, в руководстве по стилю говорится, что многоточие указывает, что при нажатии кнопки будет запрашиваться дополнительная информация - например, «Открыть файл ...» - будет запрашиваться имя файла. Ваше предлагаемое использование многоточия нарушает это руководство.

Вам понадобится некоторая пользовательская логика для реализации описанного вами поведения, но я не думаю, что это так или иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...