更多内容欢迎关注公众号: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及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~
