面试题答案
一键面试实现思路
- 为每个子视图添加长按手势识别。
- 当长按某个子视图时,通过状态变量标记该子视图为被选中状态。
- 根据状态变量,对被选中的子视图应用缩放和旋转的组合动画。
- 同样根据状态变量,对其他未被选中的子视图应用淡入淡出的动画效果。
关键代码片段
import SwiftUI
struct ContentView: View {
@State private var selectedIndex: Int? = nil
let subViews = ["A", "B", "C", "D"]
var body: some View {
VStack {
ForEach(0..<subViews.count, id: \.self) { index in
Text(subViews[index])
.font(.largeTitle)
.scaleEffect(selectedIndex == index ? 2 : 1)
.rotationEffect(.degrees(selectedIndex == index ? 360 : 0))
.opacity(selectedIndex == index ? 1 : 0)
.animation(.easeInOut(duration: 0.5), value: selectedIndex)
.onLongPressGesture {
selectedIndex = index
}
}
}
}
}
在上述代码中:
@State private var selectedIndex: Int? = nil
用于标记被选中子视图的索引。ForEach
循环创建多个子视图,根据selectedIndex
来决定每个子视图的缩放、旋转和透明度。.onLongPressGesture
为每个子视图添加长按手势,当长按发生时,更新selectedIndex
。.animation
应用动画效果,使得变化过程更平滑。