0
点赞
收藏
分享

微信扫一扫

遥控器老是乱丢,使用SwiftUI搭建一个遥控器App吧~

在本章中,你将学会使用​​SwiftUI​​搭建一个小米遥控器页面。

项目背景

每次在看电视的时候把遥控器随意丢在沙发上,过一会儿总是莫名其妙地找不到了。

打开米家App,里面的遥控器太简约了,无法复原实体遥控器的美观。

于是乎,就想着仿造遥控器外形自己做一个遥控器页面。

说干就干。

项目搭建

首先,创建一个新的​​SwiftUI​​​项目,命名为​​RemoteControl​​。

遥控器老是乱丢,使用SwiftUI搭建一个遥控器App吧~_新视图

页面样式

我们来看看小米遥控器的样式,示例:

遥控器老是乱丢,使用SwiftUI搭建一个遥控器App吧~_SwiftUI_02

复用视图

我们发现存在很多相同外观样式的按钮,这里我们可以​​抽离​​出相同的结构,以便于简化代码。示例:

// 按钮复用视图
struct imageBtnView: View {
var image: String
var imageColor: Color

var body: some View {
Button(action: {
}) {
Image(systemName: image)
.foregroundColor(imageColor)
.font(.system(size: 17))
.frame(width: 40, height: 40)
.background(Color(red: 66 / 255, green: 66 / 255, blue: 66 / 255))
.clipShape(Circle())
.overlay(Circle().stroke(Color.black, lineWidth: 4))
}
}
}

上述代码中,我们创建了一个新的视图​​imageBtnView​​。

我们声明了2个变量​​image​​​图片,​​imageColor​​​图片颜色。然后在​​body​​​中构建视图样式,我们给​​Image​​​图片内容引用我们声明好的变量​​image​​​,图标填充颜色引用我们声明好的变量​​imageColor​​。

然后完善了按钮样式,大小​​17​​​,背景颜色为​​浅灰色​​​,背景为​​圆形​​​,最后再覆盖一个​​圆形的边框​​。

基础按钮

我们在​​ContentView​​​视图中使用我们构建的​​imageBtnView​​结构体完成样式,示例:

struct ContentView: View {
var body: some View {
VStack(spacing: 32) {
imageBtnView(image: "power", imageColor: .red)
imageBtnView(image: "mic", imageColor: .white)

HStack(spacing: 32) {
imageBtnView(image: "house", imageColor: .white)
imageBtnView(image: "arrow.uturn.backward", imageColor: .white)
imageBtnView(image: "slider.horizontal.3", imageColor: .white)
}
Spacer()
}
.padding()
.padding(.top, 40)
.frame(maxHeight: .infinity)
.background(Color(red: 51 / 255, green: 51 / 255, blue: 51 / 255))
.cornerRadius(16)
}
}

遥控器老是乱丢,使用SwiftUI搭建一个遥控器App吧~_Swift_03

上述代码中,我们使用之前构建好的结构体​​imageBtnView​​很容易地构建了除了遥控器的样式。

我们只需要注意好排列,最后给整个排布好的视图加一个背景颜色圆角,一个基本的遥控器样式就完成了。

我们看看还少了什么,是的,少了上下左右按钮,以及音量调节按钮

控制按钮

我们先来构建上下左右控制按钮,示例:

// 上下左右按钮
func mainBtnView() -> some View {
Circle()
.fill(Color(red: 66 / 255, green: 66 / 255, blue: 66 / 255))
.frame(width: 190, height: 190)
.overlay(Circle().stroke(Color.black, lineWidth: 6))
.overlay {
Button(action: {
}) {
Circle()
.fill(Color(red: 66 / 255, green: 66 / 255, blue: 66 / 255))
.frame(width: 100, height: 100)
.overlay(Circle().stroke(Color.black, lineWidth: 6))
}
}
}

遥控器老是乱丢,使用SwiftUI搭建一个遥控器App吧~_SwiftUI_04

上述代码中,我们创建了一个新视图​​mainBtnView​​。

我们使用​​Circle​​​圆形,再使用​​overlay​​​修饰符叠加了一个小一点的​​Circle​​圆形,这样我们就完成了上下左右操作按钮。

音量按钮

最后是我们的音量调节按钮,示例:

// 音量按钮
func volumeBtnView() -> some View {
VStack(spacing: 100) {
Button(action: {
}) {
Image(systemName: "plus")
.font(.system(size: 17))
.foregroundColor(.white)
}
Button(action: {
}) {
Image(systemName: "minus")
.font(.system(size: 17))
.foregroundColor(.white)
}
}
.padding()
.background(Color(red: 66 / 255, green: 66 / 255, blue: 66 / 255))
.cornerRadius(32)
.overlay(RoundedRectangle(cornerRadius: 32).stroke(Color.black, lineWidth: 4))
}

遥控器老是乱丢,使用SwiftUI搭建一个遥控器App吧~_Swift_05

上述代码中,我们创建了一个新视图​​volumeBtnView​​。

我们使用2个​​Image​​​图片利用​​VStack​​​纵向排布,最后使用​​overlay​​覆盖一个边框。

这样我们就完成了遥控器的所有样式内容。

项目预览

遥控器老是乱丢,使用SwiftUI搭建一个遥控器App吧~_SwiftUI_06

恭喜你,完成了整个项目的全部内容!

快来动手试试吧。

如果本专栏对你有帮助,不妨点赞、评论、关注~

举报

相关推荐

0 条评论