[SwiftUI 100天] Day-6 猜国旗 · part3

651 阅读2分钟
更多内容欢迎关注公众号:Swift花园

国旗风格化

虽然还很粗糙,我们的游戏已经能正常工作。幸运的是,我们可以通过一些小调整让整个 app 的视觉变好。

首先,让我们纯色的背景替换成一个从蓝色到黑色的线性梯度渐变,以确保即便国旗中有跟蓝色相近的颜色也能和背景区分开来。

找到这一行:

Color.blue.edgesIgnoringSafeArea(.all)

替换成:

LinearGradient(gradient: Gradient(colors: [.blue, .black]), startPoint: .top, endPoint: .bottom)
    .edgesIgnoringSafeArea(.all)

现在让我们来设计国家名字 – 这是玩家需要猜的部分 – 也是屏幕上最重要的文本。 我们会用到 font() 修改器,它可以从 iOS 内建的字号中选择。我们还可以添加 fontWeight() 来加粗文本。

把这两个修改器直接加到 Text(countries[correctAnswer]) 视图后面:

.font(.largeTitle)
.fontWeight(.black)

“Large title” 是 iOS 内置提供给我们的最大字号,并且会根据用户设置自动放大或者缩小 – 这是被称为 Dynamic Type 的特性。

SwiftUI 提供许多修改器来控制视图的呈现方式,我们会用到其中的三个:一个用来修改国旗的形状,一个用来给国旗添加边框,最后一个用来绘制阴影。

Swift内建了四种形状:矩形,圆角矩形,圆形,胶囊。这里我们采用胶囊:它会确保最短边完全圆角化,非常适用于按钮。把图像弄成胶囊的形状很简单,只要添加 .clipShape(Capsule()) 修改器,就像这样:

.clipShape(Capsule())

至于添加边框,需要用到 overlay() 修改器。它允许我们绘制另一个视图到国旗上面。这里我们也是把边框绘制成一个由黑色描边组成的胶囊形状。在 clipShape() 之后添加这个修改器:

.overlay(Capsule().stroke(Color.black, lineWidth: 1))

最后我们还需要在每一个国旗周围添加阴影,以便从背景中脱颖而出。这是通过 shadow() 实现的,它接收颜色,半径,阴影的X和Y偏移量。如果你忽略X 和 Y,默认会采用0。所以,我们可以加上最后一个修改器:

.shadow(color: .black, radius: 2)

完整的国旗图像代码如下:

Image(self.countries[number])
    .renderingMode(.original)
    .clipShape(Capsule())
    .overlay(Capsule().stroke(Color.black, lineWidth: 1))
    .shadow(color: .black, radius: 2)


我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~