У меня есть изображение, которое я сделал в PaintCode, которое я хочу анимировать. PaintCode предоставляет функцию рисования для UIKit, а не SwiftUI. Поэтому для тестирования я могу реализовать его в UIKit со следующим V C:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var paintCode: PaintCodeView!
@IBOutlet weak var slider: UISlider!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func sliderMoved(_ sender: Any) {
paintCode.progress = CGFloat(slider.value)
}
}
class PaintCodeView: UIView {
private var _progress: CGFloat = 0.0
var progress: CGFloat {
set {
if newValue < 0 {
_progress = 0
} else if newValue > 1 {
_progress = 1
} else {
_progress = newValue
}
setNeedsDisplay()
}
get {
return _progress
}
}
override func draw(_ rect: CGRect) {
LinkStyles.drawLogoAnimated(frame: self.bounds, resizing: .aspectFit, animationProgress: _progress)
}
}
Но если я попытаюсь обернуть тот же рисунок UIView в UIViewRepresentable для использования в SwiftUI, он не рисует его должным образом, вместо этого имеет черный фон и блестящую анимацию.
import SwiftUI
import UIKit
struct TestView: View {
@State var progress: Float = 0.0
var body: some View {
VStack {
Logo(animationProgress: $progress)
.frame(width: 300, height: 300)
Text("\(progress)")
Slider(value: $progress)
.padding(.horizontal)
}
}
}
struct Logo: UIViewRepresentable {
@Binding var animationProgress: Float
func makeUIView(context: Context) -> PaintCodeView {
print("LinkLogo Make: \(animationProgress)")
let view = PaintCodeView()
view.progress = CGFloat(animationProgress)
return view
}
func updateUIView(_ logoView: PaintCodeView, context: Context) {
logoView.progress = CGFloat(animationProgress)
}
}
class PaintCodeView: UIView {
private var _progress: CGFloat = 0.0
var progress: CGFloat {
set {
if newValue < 0 {
_progress = 0
} else if newValue > 1 {
_progress = 1
} else {
_progress = newValue
}
setNeedsDisplay()
}
get {
return _progress
}
}
override func draw(_ rect: CGRect) {
LinkStyles.drawLogoAnimated(frame: self.bounds, resizing: .aspectFit, animationProgress: _progress)
}
}
Любой Понятие, что я делаю не так?