2017-02-15 13 views
-6

Я хотел бы анимировать мой ярлык, чтобы слова отображались один за другим каждую секунду. Как будто пользователь читает, когда появляются новые слова. Кто-нибудь знает, как это сделать, или есть что-то на GitHub?Анимать текст внутри метки - Новое слово отображается так, как будто чтение

Благодаря

+0

См http://stackoverflow.com/ Вопросы/11686642/letter-by-letter-animation-for-uilabel –

+1

Обычно не одобряют вопросы, не пытаясь что-то себе и не отправляя то, что вы пробовали. Я дал ответ («потому что это действительно очень легко»), но в следующий раз, * попробуй это сначала * - у немногих людей есть время на их руки, чтобы написать код для вас! – Grimxn

+0

Привет, Гримкс, да, ты совершенно прав. Я совершенно новичок в кодировании, и я становлюсь немного ленивым. Цените свой ответ. –

ответ

0

Как говорит @SeyyedParsaNeshaei, есть еще answer что дает «бегущей строки» типа прокрутки, однако, если то, что вы хотите (как вы говорите) одно слово, в то время, рассмотрим следующий маленький эскиз , который будет работать на Playground. Он в основном настраивает таймер, который меняет текст UILabel на одно слово за раз.

import UIKit 
import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true 

class MyVC: UIViewController { 
    var tickTock: Int = 0 
    var myString = "" 
    var label: UILabel! 
    // Following block only needed in Playground. 
    // Normally you would wire up the label in IB. 
    { didSet { self.view.addSubview(self.label) } } 

    override func viewDidLoad() { 
     // This next line only necessary in Playground. 
     // Normally, the view would be set from the StoryBoard 
     self.view = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 100, height: 60))) 
     super.viewDidLoad() 
     // "1" in the next line is the inter-word interval in seconds. 
     // Obviously you wouldn't hard-wire this. 
     let _ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { _ in 
      let words = self.myString.components(separatedBy: " ") 
      var word = "<Nothing>" 
      if words.count > 0 { 
       self.tickTock = self.tickTock % words.count 
       if !words[self.tickTock].isEmpty { 
        word = words[self.tickTock] 
       } 
      } 
      self.label?.text = word 
      self.tickTock += 1 
     }) 
    } 
} 
// Playground code to test: 
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 60)) 
label.textColor = .yellow 
label.textAlignment = .center 
let myVC = MyVC() 
myVC.myString = "May the source be with you" 
myVC.label = label 

PlaygroundPage.current.liveView = myVC.view 

Чтобы просмотреть анимацию, выберите «Вид»> «Редактор помощника»> «Редактор ассистента» в меню «Детская площадка».

Для более полного решения, вы, вероятно, хотите посмотреть на components(separatedBy: CharactersSet), а не components(separatedBy: String), который я использовал - это зависит от того, как вы хотите, чтобы представить знаки препинания ...

+0

Еще раз спасибо, работает очень хорошо. Я надеялся, что слова останутся такими, что в конце будет читать всю строку («Пусть источник будет с вами»). Будет играть, приветствует снова. –

+1

Добро пожаловать! Легко сделать - просто отобразите каждое слово до «tickTock», а не одно из них ... – Grimxn

+0

Спасибо, мне удалось заставить его работать! Я очень доволен собой, и теперь это становится большим. Я собирался спросить о недействительности таймера, но я вижу, что вы добавили комментарий, говорящий // Очевидно, что вы не будете жестко прокладывать это. Я думаю, это отвечает на мой вопрос ... Приветствия! –