我有一组按顺时针方向旋转的按钮,但我无法正确单击它们:

我认为补偿有问题,但我不知道如何解决,有什么建议吗?

这是代码:

struct CategoryView: View {
    // Circle Radius
    @State private var radius: Double = 150
    let circleSize: Double = 350
    // Degree of circle
    @State private var degree = -90.0
    let cards = ["John", "Mark", "Alex", "Kevin", "Jimmy"]
    
    var body: some View {
        ZStack {
            let anglePerCount = Double.pi * 2.0 / Double(cards.count)
            ForEach(0..<cards.count, id: \.self) { index in
                let angle = Double(index) * anglePerCount
                let xOffset = CGFloat(radius * cos(angle))
                let yOffset = CGFloat(radius * sin(angle))
                Button {
                    
                } label: {
                Text(cards[index])
                    .font(.title)
                    .fontWeight(.bold)
                    .rotationEffect(Angle(radians: angle + Double.pi/2))
                    .offset(x: xOffset, y: yOffset)
                }
            }
        }
        .rotationEffect(Angle(degrees: degree))
        .onAppear() {
            radius = circleSize/2 - 47 // 47 is for padding
        }
    }
}

推荐答案

这是一个简单的错误,所有SwiftUI开发人员都犯过无数次.您正在修改标签,但不是实际的按钮本身.只需将修改器移动到按钮.

Button (action: {}, label: {
            Text(cards[index])
                .font(.title)
                .fontWeight(.bold)
            })
             .rotationEffect(Angle(radians: angle + Double.pi/2))
             .offset(x: xOffset, y: yOffset)

在SwiftUI中,几乎所有东西都是View,可以这样对待.一个按钮,也就是一个视图,可以具有与Text相同的大部分修改器.在您的问题中,您更改了按钮的内部视图,而不是实际的按钮本身.这就是为什么当你点击中间的时候,它似乎没有被正确定位,但事实上它也完全按照你说的做了.这是一件重要的事情要记住,因为你实际上可以推、拉和偏移视图之外的东西,这会产生一些有趣的布局;布局,如侧菜单或模态.

Ios相关问答推荐

自定义油漆圆角三角形

围绕对象旋转和移动相机不起作用Swift SceneKit

为什么iOS委派在KMM中不能正常工作?

SwiftUI - 搜索栏和导航标题之间的空间太大

在 Android 和 iOS 应用程序上下文中阻止后台线程有哪些缺点?

Swift locationManager.requestWhenInUseAuthorization() 不提示用户

mapView swift 导致警告有网格错误

发生错误.请稍后重试.在 App Store 连接中

如何在SwiftUI中实现淡入淡出加粘标题屏幕效果

如何在 SwiftUI 中只显示一次随机数组的项目?

集成 IDNow SDK 时未找到 Xcode FLAnimatedImage.h 文件问题

满足条件时 SwiftUI 动画背景 colored颜色 变化

SwiftUI - 在ForEach的每个元素之间自动添加分隔符

向左或向右移动时如何水平翻转sprite?

将flutter android项目导入iOS

以编程方式获取故事板 ID?

在 Swift 中上传带参数的图像

故事板中的 colored颜色 与 UIColor 不匹配

标题为 UIImage 的导航栏

如何进行键值观察并在 UIView 的框架上获取 KVO 回调?