SwiftUI - 丑陋的动画从纵向切换到横向

Posted

技术标签:

【中文标题】SwiftUI - 丑陋的动画从纵向切换到横向【英文标题】:SwiftUI - Ugly Animation switching from portrait to landscape 【发布时间】:2020-12-12 13:47:59 【问题描述】:

我有这个适用于 iPhone 的应用程序,我想要两个视图,一个用于纵向,一个用于横向。所以我在 ContentView 上有这个:

struct ContentView: View 
    var body: some View           
      Group 
        GeometryReader  geometry in
          if (geometry.size.width > geometry.size.height) 
            ZStack 
              Color.red
                .edgesIgnoringSafeArea(.all)
              
              Text("LANDSCAPE")
                .font(.title)
                .foregroundColor(.white)
            
          
          
          if (geometry.size.width < geometry.size.height) 
            
            ZStack 
              Color.blue
                .edgesIgnoringSafeArea(.all)
              
              Text("PORTRAIT")
                .font(.title)
                .foregroundColor(.white)
            
          
        
      
      .background(Color.black.edgesIgnoringSafeArea(.all))
    

当 iPhone 旋转时,我有这个丑陋的动画:

我不喜欢从边缘传来并像那样旋转的视图。 有什么方法可以让视图到位,只需更改颜色和文本?

有什么方法可以改善这一点并创造出更漂亮的东西吗?

【问题讨论】:

【参考方案1】:

这是可能的解决方案 - 只是改变了使用过的容器的组合。

使用 Xcode 12.1 / ios 14.1 测试

struct ContentView: View 
    var body: some View 
        GeometryReader  gp in
            ZStack 
                LANDSCAPEView().opacity(gp.size.width > gp.size.height ? 1.0 : 0)
                PORTRAITView().opacity(gp.size.width < gp.size.height ? 1.0 : 0)
            
        
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        .animation(.default)
        .background(Color.black.edgesIgnoringSafeArea(.all))
    


struct LANDSCAPEView: View 
    var body: some View 
        Color.red
            .overlay(
                
                Text("LANDSCAPE")
                    .font(.title)
                    .foregroundColor(.white)
            )
            .edgesIgnoringSafeArea(.all)
    


struct PORTRAITView: View 
    var body: some View 
        Color.blue.overlay(
            
            Text("PORTRAIT")
                .font(.title)
                .foregroundColor(.white)
        )
        .edgesIgnoringSafeArea(.all)
    

【讨论】:

谢谢。你的回答给了我很多想法。

以上是关于SwiftUI - 丑陋的动画从纵向切换到横向的主要内容,如果未能解决你的问题,请参考以下文章

应用动画从纵向到横向

元素无法从纵向切换到横向 ipad

在两个视图之间切换以及从纵向切换到横向时出现 iPad 方向问题,反之亦然

在 iPhone 中将视图从纵向切换到横向,就像 iPhone 中的计算器一样

从横向切换到纵向后,将 UIScrollView 保持在正确的位置

Iphone:无法从我的横向视图切换回纵向视图