У меня есть представление
struct CustomImageView : View {
var body: some View {
Image("someImage")
}
}
Когда я ссылаюсь на этот вид снаружи, я не могу изменить размер изображения.
Я знаю, что могу передавать параметры, но я искал более удобный способ сделать это с помощью модификаторов?
VStack {
CustomImageView()
.resizable() // This does not work
}
изменяемый размер, кажется, работает только с изображением напрямую.
Кто-нибудь знает, как сделать CustomImageView изменяемого размера?
Обновление: Я понимаю, что могу использовать параметр, но есть ли способ сделать это с помощью модификаторов? Resizable было только одно свойство, но есть и другие свойства. И перечислять их как отдельные переменные будет слишком много
Реализован ответ на основе @ matteo-pacini
Он использует AlamofireImage для загрузки удаленного изображения в ImageView.
struct RemoteImage : View {
var url: URLConvertible
@ObjectBinding var imageLoader = AlamofireImageLoader()
private (set) var _resizable: (capInsets: EdgeInsets, resizingMode: Image.ResizingMode) = (EdgeInsets(), .stretch)
var body: some View {
Image(uiImage: imageLoader.image)
.resizable(capInsets: _resizable.capInsets, resizingMode: _resizable.resizingMode)
.onAppear() {
self.imageLoader.loadImage(url: self.url)
}
}
func resizable(capInsets: EdgeInsets = EdgeInsets(), resizingMode: Image.ResizingMode = .stretch) -> RemoteImage {
return RemoteImage(url: url, _resizable: (capInsets, resizingMode))
}
}
class AlamofireImageLoader: BindableObject {
var didChange = PassthroughSubject<Void, Never>()
var image = UIImage() {
didSet {
DispatchQueue.main.async {
self.didChange.send(Void())
}
}
}
convenience init(url: URLConvertible) {
self.init()
loadImage(url: url)
}
func loadImage(url: URLConvertible) {
Alamofire.request(url).responseImage { response in
if let image = response.result.value {
self.image = image
}
}
}
}