38 lines
1.1 KiB
Swift
38 lines
1.1 KiB
Swift
import SwiftUI
|
||
import UIKit
|
||
|
||
// 包装UIImageView以支持APNG动画
|
||
struct APNGView: UIViewRepresentable {
|
||
let imageName: String
|
||
@Binding var isAnimating: Bool
|
||
|
||
func makeUIView(context: Context) -> UIImageView {
|
||
let imageView = UIImageView()
|
||
|
||
// 从资源加载APNG
|
||
if let image = UIImage(named: imageName) {
|
||
imageView.image = image
|
||
// 启用动画
|
||
imageView.animationImages = image.images
|
||
// 设置动画时长(根据实际帧数调整)
|
||
imageView.animationDuration = image.duration
|
||
// 根据isAnimating状态决定是否开始动画
|
||
if isAnimating {
|
||
imageView.startAnimating()
|
||
}
|
||
}
|
||
|
||
return imageView
|
||
}
|
||
|
||
func updateUIView(_ uiView: UIImageView, context: Context) {
|
||
// 根据isAnimating状态控制动画
|
||
if isAnimating {
|
||
if !uiView.isAnimating {
|
||
uiView.startAnimating()
|
||
}
|
||
} else {
|
||
uiView.stopAnimating()
|
||
}
|
||
}
|
||
} |