gpt4 book ai didi

swift - 用动画填充水平 View (Swift)

转载 作者:行者123 更新时间:2023-11-30 11:16:12 24 4
gpt4 key购买 nike

我正在尝试用动画填充水平 View (类似于进度条)(因此它将从左边缘向右填充)。

这是我所拥有的,但它不起作用

override init(frame: CGRect) {
super.init(frame: frame)

let outlineView = UIView()
outlineView.layer.borderColor = UIColor.black.cgColor
outlineView.layer.borderWidth = 1
endorsementViews.append(outlineView)

addSubview(outlineView)

// custom UIView anchor extension
outlineView.anchor(topAnchor, left: leftAnchor, bottom: nil, right: rightAnchor, topConstant: 12, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 75)

let fillView = UIView()
fillView.backgroundColor = .orange
fillView.alpha = 0
fillViews.append(fillView)

outlineView.addSubview(fillView)

// custom UIView anchor extension
fillView.anchor(outlineView.topAnchor, left: outlineView.leftAnchor, bottom: outlineView.bottomAnchor, right: nil, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 195, heightConstant: 0)
}

override func layoutSubviews() {
super.layoutSubviews()

for index in 0...2 {
let fillWidth = 75

UIView.animate(withDuration: 3.5) {
self.fillViews[index].frame.size.width = fillWidth
}
}
}

最佳答案

您不需要在 layoutSubviews() 方法中更改动画。如果您在动画中更改 View 的大小,您的 fillView 的大小也会在动画中更改。

但是,如果您想根据情况更改 fillView 的框架:您应该在操作(或函数)中执行此操作并使用 layoutIfNeeded() 方法动画功能底部的 View 如下所示:

func someFunction() {
let fillWidth = 75
UIView.animate(withDuration: 3.5)
for index in 0...2 {
self.fillViews[index].frame.size.width = fillWidth
}
self.layoutIfNeeded()
}
}

注意:您应该避免同时使用 frame 属性和约束来将框架设置为同一 View 。您可以在动画中更改 View 的约束属性或在 layoutSubviews() 方法中设置 View 的框架,并使用 bool 控件检查 subview 的实际状态以设置特定的框架(如果需要)。

关于swift - 用动画填充水平 View (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51718591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com