面试题答案
一键面试关键API
NavigationLink
:用于在SwiftUI中创建导航链接,从一个视图导航到另一个视图。withAnimation
:用于包裹需要执行动画的代码块,控制动画的执行。transition
:视图修饰符,用于定义视图的转场效果。其中包含多种预定义的转场,也可以自定义。
实现思路
- 创建两个视图,一个作为源视图,一个作为目标视图。
- 在源视图中使用
NavigationLink
来触发导航到目标视图。 - 为
NavigationLink
或目标视图应用自定义的transition
,通过AnyTransition
来组合缩放和旋转效果。 - 使用
withAnimation
来控制转场动画的执行。
关键代码
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
NavigationLink("Navigate with custom transition", destination: DetailView())
.padding()
}
.navigationTitle("Home")
}
}
}
struct DetailView: View {
var body: some View {
VStack {
Text("This is the detail view")
.padding()
}
.navigationTitle("Detail")
// 自定义转场效果
.transition(.customTransition)
}
}
extension AnyTransition {
static var customTransition: AnyTransition {
AnyTransition.scale(scale: 0.5)
.combined(with: .rotation(angle: .degrees(360)))
.combined(with: .opacity)
}
}
在上述代码中:
ContentView
是源视图,包含一个NavigationLink
,点击它会导航到DetailView
。DetailView
是目标视图,通过.transition(.customTransition)
应用了自定义转场效果。AnyTransition
扩展定义了customTransition
,它组合了缩放、旋转和透明度的转场效果。