2013-04-17 3 views
0

У меня есть реализация, которая абстрагирует от NSView для отображения прокручиваемого текстового вида.NSScrollView перекрывающий текст

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

Есть ли идеи по поводу того, что я могу исправить здесь? Большое спасибо.

Наконец

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

enter image description here

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

enter image description here

Вот код с прокруткой, так как скопировать/вставить из iTunes Song Title Scrolling in Cocoa

+0

Можете ли вы показать код, как он обрабатывает прокрутку? Похоже, что это неправильно очищает представление до рендеринга текста в новой позиции. Кроме того, как долго проходит ничья? – Fogmeister

+0

Несомненно, спасибо за ваш ответ. Я получил исходный код. http://stackoverflow.com/questions/3232801/itunes-song-title-scrolling-in-cocoa И я думаю, что это очень быстро. [дисплейNewSentance2 комплектSpeed: 0.01]; // перерисовывает каждые 1/100th секунды – Finley

+0

Я прокомментировал deallocs и релизы. – Finley

ответ

1

С DrawRect перезаписывается он также должен очистить фон, иначе ничего обращается под ним будет видно через и (как вы можете видеть) предыдущий контент не удаляется. Итак, перед началом написания текста добавьте вызов [backgroundColor set] и NSRectFill.

+0

Привет, спасибо за помощь @Mike. Я добавил [[NSColor whiteColor] setFill]; NSRectFill (dirtyRect); К нищете - (void) drawRect: (NSRect) dirtyRect {} Фон белый, но у меня все еще есть проблема. Я заметил, что более короткие строки это не проблема. Как только строка будет больше, чем объем пространства в текстовом представлении, чтобы представить все это сразу по какой-то причине, тогда это начинает происходить. Здесь пример lastphotoisoverlap. http://www.use.com/319a1499564027f4cba7#photo=3 http://www.use.com/319a1499564027f4cba7#photo=2 http://www.use.com/319a1499564027f4cba7#photo= 1 – Finley

+0

Ну, если вы посмотрите на этот код, на который вы ссылаетесь, вы увидите, что это для горизонтальной прокрутки одной строки. Точечное вычисление в drawRect выглядит подозрительно, например. когда текст прокручивается, когда точка вывода перемещается с помощью грязного прямоугольника с, что может быть меньше ширины текста. Следовательно, текст внезапно частично отражается в представлении. После этого появляется другая картина, если x по-прежнему <0 (что может случиться легко, если текст достаточно большой). Таким образом, это снова рисует текст. –

+0

Спасибо. Я забыл, что я изменил часть кода, чтобы быть thing.thing.y вместо thing.thing.x, чтобы он перемещался по вертикали. Я теперь изменил string.width, чтобы быть .hight безрезультатно. Я не понимаю цели сравнения x с 0 и ширины прямоугольника с шириной текста. Или, может быть, высота текста по сравнению с прямой высотой, в моем случае, если прямоугольник является областью рисования? Это похоже на высоту rect, потому что любая строка, которая равна или меньше этого, работает. Большое спасибо за вашу помощь, я думаю, что это так, как вы сказали, я буду продолжать работать над этим. – Finley

Смежные вопросы