chore: 播放动画容器调整
This commit is contained in:
parent
c4c33158fd
commit
7adf475b8f
@ -7,25 +7,43 @@ struct BlindBoxLottieOnceView: UIViewRepresentable {
|
|||||||
var animationSpeed: CGFloat = 1.0
|
var animationSpeed: CGFloat = 1.0
|
||||||
let onCompleted: () -> Void
|
let onCompleted: () -> Void
|
||||||
|
|
||||||
func makeUIView(context: Context) -> LottieAnimationView {
|
func makeUIView(context: Context) -> UIView {
|
||||||
|
// 与通用 LottieView 一致:用容器承载并通过约束填充,避免尺寸偏差
|
||||||
|
let container = UIView()
|
||||||
|
container.clipsToBounds = true
|
||||||
|
|
||||||
let animationView = LottieAnimationView()
|
let animationView = LottieAnimationView()
|
||||||
|
animationView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
|
||||||
if let animation = LottieAnimation.named(name) {
|
if let animation = LottieAnimation.named(name) {
|
||||||
animationView.animation = animation
|
animationView.animation = animation
|
||||||
} else if let path = Bundle.main.path(forResource: name, ofType: "json") {
|
} else if let path = Bundle.main.path(forResource: name, ofType: "json") {
|
||||||
let animation = LottieAnimation.filepath(path)
|
let animation = LottieAnimation.filepath(path)
|
||||||
animationView.animation = animation
|
animationView.animation = animation
|
||||||
}
|
}
|
||||||
|
|
||||||
animationView.loopMode = .playOnce
|
animationView.loopMode = .playOnce
|
||||||
animationView.animationSpeed = animationSpeed
|
animationView.animationSpeed = animationSpeed
|
||||||
animationView.contentMode = .scaleAspectFit
|
animationView.contentMode = .scaleAspectFit
|
||||||
animationView.backgroundBehavior = .pauseAndRestore
|
animationView.backgroundBehavior = .pauseAndRestore
|
||||||
|
|
||||||
|
container.addSubview(animationView)
|
||||||
|
NSLayoutConstraint.activate([
|
||||||
|
animationView.leadingAnchor.constraint(equalTo: container.leadingAnchor),
|
||||||
|
animationView.trailingAnchor.constraint(equalTo: container.trailingAnchor),
|
||||||
|
animationView.topAnchor.constraint(equalTo: container.topAnchor),
|
||||||
|
animationView.bottomAnchor.constraint(equalTo: container.bottomAnchor)
|
||||||
|
])
|
||||||
|
|
||||||
|
// 开始播放一次并在完成后回调
|
||||||
animationView.play { _ in
|
animationView.play { _ in
|
||||||
onCompleted()
|
onCompleted()
|
||||||
}
|
}
|
||||||
return animationView
|
|
||||||
|
return container
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateUIView(_ uiView: LottieAnimationView, context: Context) {
|
func updateUIView(_ uiView: UIView, context: Context) {
|
||||||
// 单次播放,不需要在更新时重复触发
|
// 单次播放,不需要在更新时重复触发
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user