У меня есть UIViewRepresentable, в который я пытаюсь обернуть UIImage.
import SwiftUI
struct ImageView: UIViewRepresentable {
var name: String
fileprivate var imageView: UIImageView = UIImageView()
fileprivate var originalImage: UIImage
@State fileprivate var size: CGSize
init(name: String) {
self.name = name
self.originalImage = UIImage(named: name)!
self._size = State(initialValue: self.originalImage.size)
print(111, self.size)
}
func makeUIView(context: Context) -> UIImageView {
imageView.image = self.originalImage
return imageView;
}
func updateUIView(_ uiView: UIImageView, context: Context) {
self.imageView.image = scaledImage()
}
fileprivate func scaledImage() -> UIImage {
print(333, self.size)
if (self.originalImage.size == self.size || self.size.width <= CGFloat(1) || self.size.height <= CGFloat(1)) {
return self.originalImage
}
UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
self.originalImage.draw(in: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!;
}
func resize(width: CGFloat, height: CGFloat) -> some View {
self.size = CGSize(width: width, height: height)
print(222, self.size, width, height)
return self.frame(width: width, height: height)
}
}
Проблема в том, что когда вызывается .resize
, состояние size
не обновляется. Это 3 строки печати:
111 (2000.0, 2000.0)
222 (2000.0, 2000.0) 100.0 100.0
333 (2000.0, 2000.0)
Это тест View
, который использует ImageView
...
struct Test: View {
var body: some View {
ZStack {
ImageView(name: "Letter-T")
.resize(width: 100, height: 100)
}
}
}
Что я делаю не так ??