设备旋转后动画点重新定位

Posted

技术标签:

【中文标题】设备旋转后动画点重新定位【英文标题】:Animated dots relocate after device rotation 【发布时间】:2020-12-18 12:35:34 【问题描述】:

我使用 SwiftUI 创建了一个带有三个动画点的按钮。当屏幕几何形状以某种方式发生变化(设备旋转、键盘打开等)时,动画就会变得混乱。请参阅随附的视频。如何让圆圈保持相对于按钮的位置?

这是我的代码:

struct ContentView: View 
    var body: some View 
        
        Button(action: , label: 
            AnimatedDot().frame(minWidth: 200, maxWidth: .infinity, minHeight: 20, maxHeight: 20)
        ).foregroundColor(Color.blue)
        .padding()
        .background(Color.gray)
        .cornerRadius(10.0)
        .frame(minWidth: 0, maxWidth: 350)
        
    


struct AnimatedDot: View 
    
    @State private var shouldAnimate = false
    
    var body: some View 
        HStack 
            Circle()
                .fill(Color.white)
                .frame(width: 15, height: 15)
                .scaleEffect(shouldAnimate ? 1.0 : 0.5)
                .animation(Animation.easeInOut(duration: 0.3).repeatForever())
            Circle()
                .fill(Color.white)
                .frame(width: 15, height: 15)
                .scaleEffect(shouldAnimate ? 1.0 : 0.5)
                .animation(Animation.easeInOut(duration: 0.3).repeatForever().delay(0.3))
            Circle()
                .fill(Color.white)
                .frame(width: 15, height: 15)
                .scaleEffect(shouldAnimate ? 1.0 : 0.5)
                .animation(Animation.easeInOut(duration: 0.3).repeatForever().delay(0.6))
        
        .onAppear 
            self.shouldAnimate = true
        
    
    

【问题讨论】:

我个人喜欢你的方式。太搞笑了 【参考方案1】:

这是固定的身体 - 将动画加入状态值。

使用 Xcode 12.1 / ios 14.1 测试

var body: some View 
    HStack 
        Circle()
            .fill(Color.white)
            .frame(width: 15, height: 15)
            .scaleEffect(shouldAnimate ? 1.0 : 0.5)
            .animation(Animation.easeInOut(duration: 0.3).repeatForever(), value: shouldAnimate)
        Circle()
            .fill(Color.white)
            .frame(width: 15, height: 15)
            .scaleEffect(shouldAnimate ? 1.0 : 0.5)
            .animation(Animation.easeInOut(duration: 0.3).repeatForever().delay(0.3), value: shouldAnimate)
        Circle()
            .fill(Color.white)
            .frame(width: 15, height: 15)
            .scaleEffect(shouldAnimate ? 1.0 : 0.5)
            .animation(Animation.easeInOut(duration: 0.3).repeatForever().delay(0.6), value: shouldAnimate)
    
    .onAppear 
        self.shouldAnimate = true
    

【讨论】:

以上是关于设备旋转后动画点重新定位的主要内容,如果未能解决你的问题,请参考以下文章

在设备旋转时重新定位 UIPopoverController

如何在设备旋转后重新计算约束

图像旋转后如何重新映射点?

动画 UICollectionView 单元格大小更改和重新定位周围的单元格

UICollectionView 在旋转时重新排列单元格

当方向改变时重新定位控件