UILabel没有像预期的那样出现延迟序列

Rut*_*ans 0 core-animation uiview ios swift

我想让我的UILabel以延迟的顺序出现.因此一个接一个.当我使用alpha值使它们淡入时,下面的代码可以正常工作,但是当我使用UILabels的.hidden属性时它不会做我想要它做的事情.

代码使我的UILabel同时出现而不是sum1TimeLabel在5秒后出现,sum2TimeLabel在30秒后出现秒,最后sum3TimeLabel出现在60秒后出现.我究竟做错了什么?

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    UIView.animateWithDuration(5.0, animations:  {
        self.sum1TimeLabel!.hidden = false;
    })

    UIView.animateWithDuration(30.0, animations: {
        self.sum2TimeLabel!.hidden = false;
    })

    UIView.animateWithDuration(60.0, animations: {
        self.sum3TimeLabel!.hidden = false;
    })
}
Run Code Online (Sandbox Code Playgroud)

kab*_*rai 5

正如SO用户@matt这个答案中所解释的那样,您可以简单地创建一个delay使用Grand Central Dispatch而不是使用的函数animateWithDuration,因为animateWithDuration通常用于在一段时间内制作动画,并且由于您动画的值是a Bool,它可以没有动画.

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    delay(5.0) {
        self.sum1TimeLabel?.hidden = false
    }

    delay(30.0) {
        self.sum2TimeLabel?.hidden = false
    }

    delay(60.0) {
        self.sum3TimeLabel?.hidden = false
    }
}

func delay(delay:Double, closure:()->()) {
    dispatch_after(
        dispatch_time(
            DISPATCH_TIME_NOW,
            Int64(delay * Double(NSEC_PER_SEC))
        ),
        dispatch_get_main_queue(), closure)
}
Run Code Online (Sandbox Code Playgroud)