UILabel文本逐一淡出

时间:2015-10-18 09:52:10

标签: ios swift animation uilabel

我想知道如何在UILabel中逐个淡出文字。

例如:

label.text =“abcdefg”,我想让文字逐一淡出 - > 'a','b','c','d','e','f','g'分别淡出。

我怎么能这样做?

感谢您的所有答案,我想澄清一下我希望动画淡出,比如UIViewAnimationOptions.CurveEaseInOut。

谢谢!

2 个答案:

答案 0 :(得分:6)

使用2个标签并反复淡入淡出,从每个淡入淡出之间删除每个字符。

  1. 首先显示abcdefg第二个用abcdef隐藏
  2. 淡出第一个和第二个
  3. 首先用abcdef
  4. 显示abcde第二个隐藏
  5. 先淡入淡出
  6. 或者,使用视图捕获SDK创建具有不同文本内容的标签图像,然后通过一些过渡动画显示图像。

答案 1 :(得分:0)

您可以使用NSTimer执行此操作,并从其干预字符串中删除最后一个字母。例如,你可以这样做:

淡入淡出文本动画的简单类

class TextFadeAnimation {
    var text: String
    var timer: NSTimer?
    var block: ((text: String) -> Void)?

    init(text: String) {
        self.text = text
    }

    func startAnimation(resultTextBlock block: (text: String) -> Void) {
        self.block = block
        timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("fadeOut"), userInfo: nil, repeats: true)
    }

    func stopAnimation() {
        if timer != nil {
            timer!.invalidate()
        }
    }

    @objc private func fadeOut() {
        if count(text) > 1 {
            text = text.substringToIndex(text.endIndex.predecessor())
            block!(text: text)
        } else {
            timer!.invalidate()
            block!(text: "")
        }
    }
}

使用ViewController中的示例

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    var textFadeAnimation: TextFadeAnimation?

    override func viewDidLoad() {
        super.viewDidLoad()

        textFadeAnimation = TextFadeAnimation(text: "abcdefg")
        textFadeAnimation!.startAnimation(resultTextBlock: { (text: String) -> Void in
            self.label.text = text
        })
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}