您的位置 首页 > 腾讯云社区

SwiftUI:自定义修饰符---韦弦zhy

SwiftUI为我们提供了一系列内置修饰符,例如font(),background()和clipShape()。但是,也可以创建自定义修饰符来执行特定的操作。

例如,我们可能会说应用程序中的所有标题都应具有特定的样式,因此首先我们需要创建一个自定义的ViewModifier结构体,该结构体可以实现我们想要的功能:

struct Title: ViewModifier { func body(content: Content) -> some View { content .font(.largeTitle) .foregroundColor(.white) .padding() .background(Color.blue) .clipShape(RoundedRectangle(cornerRadius: 10)) } }

现在,我们可以将其与modify()修饰符一起使用——是的,它是一个名为“modifier”的修饰符,但是它允许我们将任何种类的修饰符应用于视图,如下所示:

Text("Hello World") .modifier(Title())

使用自定义修饰符时,通常最好在View上创建扩展程序,以使其易于使用。例如,我们可以将Title修饰符包装在如下扩展中:

extension View { func titleStyle() -> some View { self.modifier(Title()) } }

我们现在可以像这样使用修饰符:

Text("Hello World") .titleStyle()

自定义修饰符不仅可以应用其他现有修饰符,还可以做更多的工作——它们还可以根据需要创建新的视图结构体。记住,修饰符会返回新对象,而不是修改现有对象,因此我们可以创建一个将视图嵌入堆栈并添加另一个视图的对象:

struct Watermark: ViewModifier { var text: String func body(content: Content) -> some View { ZStack(alignment: .bottomTrailing) { content Text(text) .font(.caption) .foregroundColor(.white) .padding(5) .background(Color.black) } } } extension View { func watermarked(with text: String) -> some View { self.modifier(Watermark(text: text)) } }

有了它,我们现在可以为任何视图添加水印,如下所示:

Color.blue .frame(width: 300, height: 200) .watermarked(with: "Hacking with Swift")

Previous: 视图拆分与组合

Hacking with iOS: SwiftUI Edition

Next: 自定义容器

---来自腾讯云社区的---韦弦zhy

关于作者: 瞎采新闻

这里可以显示个人介绍!这里可以显示个人介绍!

热门文章

留言与评论(共有 0 条评论)
   
验证码: