2017-02-13 2 views
0

Может ли кто-нибудь объяснить мне, как я могу достичь этого эффекта в Swift 3.0? Это почти эффект выделения, но я бы хотел не сдвигать UILabel.эффект marquee на UILabel путем удаления и добавления букв - Swift 3

Было бы здорово, чтобы это сделать, как этот

enter image description here

первая буква удаляется и 20-й буквы добавляется, а затем второе письмо удаляется и 21 добавляется и так далее до конца текста в строке. Я ночевка, и я действительно не знаю, как начать с нее.

+1

см. Это http://stackoverflow.com/questions/35172267/how-to-use-marquee-feature-in-swift –

+0

Хехе смешно, что даже я написал там, как это сделать, двигаясь по оси х, но я не хочу перемещать строку из стороны в сторону, я хотел бы удалить первую букву и добавить последнюю, как на gif, я загрузил выше :), но спасибо. – pixelCss

+0

Просто некоторые пояснения ... Нужно ли это делать, добавляя/удаляя буквы, или это было бы хорошо, если бы визуально неотличимо от вашего gif? (если я получаю это правильно, вы _want_ «шаг» эффект вместо гладкого скольжения ... правильно?) – Alladinian

ответ

3

Звучит как весело упражнение, так вот мой взгляд на это:

Пожалуйста, обратите внимание, что ни в коем случае не готовый код, а скорее быстрая демонстрация идеи позади этого. Также нижеприведенный фрагмент написан в контексте игровой площадки, чтобы быстро протестировать вещи.

import UIKit 
import PlaygroundSupport 

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 120, height: 30)) 
let text = "marquee effect on UILabel by removing letters in front and adding in end in swift 3" 
label.lineBreakMode = .byClipping 
label.text   = text 
label.backgroundColor = .white 
label.textAlignment = .left 

let timer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { _ in 
    DispatchQueue.main.async { 
     if let text = label.text, !text.isEmpty { 
      let index = text.index(after: text.startIndex) 
      label.text = label.text?.substring(from: index) 
     } 
    } 
} 

PlaygroundPage.current.liveView = label 

который получает вас:

enter image description here


Некоторые замечания по этому поводу:

  1. Вы можете использовать другой механизм вместо таймера, такой как CADisplayLink или пользовательский обратный вызов анимации
  2. Эффект будет работать лучше с monospaced font
  3. Этот код не обрабатывает сброс, когда текст пуст или таймер аннулирует
  4. Эффект работы, установив весь текст в метке, установите режим обтравочной чтобы отображать только символы, находящиеся внутри границ &, окончательно удаляя символы с начала строки. Я не вижу реальной причины делать «танец» для удаления/вставки, который вы описываете в вопросе, но это было бы что-то тривиальное ...

В любом случае, я надеюсь, что это имеет смысл :)

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