Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 顺序淡入雨燕_Ios_Swift_Fadein - Fatal编程技术网

Ios 顺序淡入雨燕

Ios 顺序淡入雨燕,ios,swift,fadein,Ios,Swift,Fadein,我正在使用优秀的答案来实现文本标签的淡入 然而,我想引入一个延迟,这样我就可以依次淡入几个文本标签 到目前为止(摘自答案),我正在使用: extension UIView { func fadeIn(duration: TimeInterval = 1.0, delay: TimeInterval = 0.0, completion: @escaping ((Bool) -> Void) = {(finished: Bool) -> Void in}) {

我正在使用优秀的答案来实现文本标签的淡入

然而,我想引入一个延迟,这样我就可以依次淡入几个文本标签

到目前为止(摘自答案),我正在使用:

extension UIView {

    func fadeIn(duration: TimeInterval = 1.0, delay: TimeInterval = 0.0, completion: @escaping ((Bool) -> Void) = {(finished: Bool) -> Void in}) {
        UIView.animate(withDuration: duration, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations: {
            self.alpha = 1.0
        }, completion: completion)  }
}
然后实施:

override func viewDidLoad() {

        self.line1Outlet.alpha = 0
        self.line1Outlet.fadeIn(completion: {
            (finished: Bool) -> Void in
        })

    }
我认为最好的解决方案是将延迟作为扩展中的一个参数来实现,这样我就可以轻松地为每个标签添加不同的延迟。(例如

我已经尝试将self.delay添加到扩展中(在self.alpha下面),但这不起作用,我不知道如何重构该扩展以允许我所追求的


这个问题的答案是一种可重复使用的方法,实现顺序淡入淡出,希望对许多其他人有用!

在您创建的
扩展中,首先在
fadeIn
函数的顶部添加
self.alpha=0.0
,即

extension UIView {
    func fadeIn(duration: TimeInterval = 1.0, delay: TimeInterval = 0.0, completion: ((Bool)->())? = nil) {
        self.alpha = 0.0
        UIView.animate(withDuration: duration, delay: delay, options: .curveEaseIn, animations: {
            self.alpha = 1.0
        }, completion: completion)
    }
}
现在,假设您的
视图中有3个
标签
,即

@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
@IBOutlet weak var label3: UILabel!
动画
按如下顺序添加到
标签

self.label1.fadeIn(delay: 0.1) { _ in
    self.label2.fadeIn(delay: 0.2, completion: { _ in
        self.label3.fadeIn(delay: 0.3, completion: { _ in
            print("Done All")
        })
    })
}
由于
fadeIn
方法中的
duration参数
具有
默认值
,因此我们可以避免这种情况

调用
fadeIn
的方式是调用它的一种方式。由于该方法包含多个
默认参数,因此也可以用其他方式调用它

阅读有关默认参数的更多信息

编辑:

为了最初隐藏
标签
,请在
情节提要
自身中将所有
标签
alpha
设置为
0


hmm这在模拟器中对我不起作用,print语句起作用,但没有动画发生最初将所有标签的alpha设置为0。还可以看到我添加的gif。谢谢-现在效果更好了,但我在显示所有标签的地方看到了它。然后每个标签都消失了,然后以正确的延迟值淡入。呵呵我要让它们一开始就隐藏起来吗?我已经在顶部设置了alpha=0,就像你说的那样。为了一开始就隐藏它们,在故事板本身中将所有标签的alpha设置为0。啊,对了,好的-有没有办法在模型中设置它(我想这是self.alpha=0在这一行应该做的)。因此,如果一个标签应用了淡入,它最初也会将其设置为0?如果没有,不用担心,这非常有效,我会将其标记为正确的func fadeIn(持续时间:TimeInterval=1.0,延迟:TimeInterval=0.0,完成:((Bool)->())?=nil){self.alpha=0.0
self.label1.fadeIn(delay: 0.1) { _ in
    self.label2.fadeIn(delay: 0.2, completion: { _ in
        self.label3.fadeIn(delay: 0.3, completion: { _ in
            print("Done All")
        })
    })
}