逐个淡出UILabel文字

3
我想找出如何逐个淡出UILabel中的文本。
例如: label.text = "abcdefg",我想让文本一个一个淡出 ->依次淡出 'a','b','c','d','e','f','g'。
我该怎么办?
感谢您所有的答案,我想澄清一下,我想要一个淡出的动画,类似于UIViewAnimationOptions.CurveEaseInOut。
谢谢!
2个回答

6
使用两个标签,重复淡入淡出它们,并在每次淡入淡出之间从每个标签中删除字符。
  1. 第一个标签显示abcdefg,第二个标签隐藏abcdef。
  2. 淡出第一个标签并淡入第二个标签。
  3. 第一个标签隐藏abcde,第二个标签显示abcdef。
  4. 淡入第一个标签并淡出第二个标签。
  5. 以此类推。
或者,使用视图捕获SDK创建具有不同文本内容的标签图像,然后通过一些转换对这些图像进行动画处理。

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.
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接