Swiftui 迅捷可以';自定义图像修改器时是否直接调用修改器?
我正在尝试自定义图像修改器,就像文本修改器一样:Swiftui 迅捷可以';自定义图像修改器时是否直接调用修改器?,swiftui,Swiftui,我正在尝试自定义图像修改器,就像文本修改器一样: struct FlagImage: ViewModifier { func body(content: Content) -> some View { content .renderingMode(.original) .clipShape(Capsule()) .overlay(Capsule().stroke(Color.black,
struct FlagImage: ViewModifier {
func body(content: Content) -> some View {
content
.renderingMode(.original)
.clipShape(Capsule())
.overlay(Capsule().stroke(Color.black, lineWidth: 1))
.shadow(color: .black, radius: 2)
}
}
第一个错误是
Value of type 'FlagImage.Content' (aka '_ViewModifier_Content<FlagImage>') has no member 'renderingMode'
Cannot infer contextual base in reference to member 'original'
为什么图像修改器内容不能直接调用.renderingMode(.original)?
如何解决此问题?
ViewModifier
是视图的修饰符,它是通用视图,因此它的内容在某些通用视图中也是不透明的,您无法对其应用特定的修饰符,如Image.renderingMode
解决方案是将函数修饰符直接添加到扩展中的图像,如
extension Image {
func flagImage() -> some View {
self
.renderingMode(.original)
.clipShape(Capsule())
.overlay(Capsule().stroke(Color.black, lineWidth: 1))
.shadow(color: .black, radius: 2)
}
}
使用Xcode 11.4/iOS 13.4进行测试
extension Image {
func flagImage() -> some View {
self
.renderingMode(.original)
.clipShape(Capsule())
.overlay(Capsule().stroke(Color.black, lineWidth: 1))
.shadow(color: .black, radius: 2)
}
}