gpt4 book ai didi

ios - 如何使用 SwiftUI 制作自定义图像 resizable()

转载 作者:可可西里 更新时间:2023-11-01 00:54:05 25 4
gpt4 key购买 nike

我有意见

struct CustomImageView : View {
var body: some View {
Image("someImage")
}
}

当我在外部引用此 View 时,无法调整图像大小。我知道我可以传递参数,但我一直在寻找一种更简洁的方法来通过修饰符来传递参数?

VStack {
CustomImageView()
.resizable() // This does not work
}

resizable 似乎只能直接处理图像。有谁知道如何使 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
}
}
}
}

最佳答案

struct CustomImageView : View {

private var isResizable = false

var body: some View {
let image = Image("someImage")
return isResizable ? image.resizable() : image
}

func resizable() -> CustomImageView {
return CustomImageView(isResizable: true)
}
}

然后像这样使用它。


struct ContentView: View {
var body: some View {
VStack {
CustomImageView()
.resizable()
}
}
}

关于ios - 如何使用 SwiftUI 制作自定义图像 resizable(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56610266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com