You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中利用UIScreen判断屏幕半区实现文本拖拽定位

解决方案

要实现拖拽至屏幕上半区松手后停在顶部、下半区回到底部的逻辑,只需在DragGesture的onEnded回调中加入基于屏幕中点的位置判断即可:

修改后的完整代码

struct SwiftUIView: View {
    @State var offset: CGSize = .zero
    @State var isOnTop = false
    
    var body: some View {
        Text("Hello!")
            .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: isOnTop ? .top : .bottom)
            .offset(offset)
            .gesture(
                DragGesture()
                    .onChanged { value in
                        withAnimation(.spring()) {
                            offset = value.translation
                        }
                    }
                    .onEnded { value in
                        withAnimation(.spring()) {
                            offset = .zero
                            // 获取屏幕垂直方向中点
                            let screenMidY = UIScreen.main.bounds.midY
                            // 判断拖拽结束位置是否在上半区
                            isOnTop = value.globalLocation.y < screenMidY
                        }
                    }
            )
    }
}

关键逻辑说明

  1. 屏幕中点计算:通过UIScreen.main.bounds.midY获取设备屏幕垂直方向的中点坐标,以此作为上下半区的分界。
  2. 拖拽位置判断:利用DragGesture提供的globalLocation.y(拖拽结束时的全局屏幕Y坐标)与屏幕中点比较:
    • 若globalLocation.y < screenMidY,说明拖拽结束位置处于屏幕上半区,将isOnTop设为true,文本会对齐到顶部;
    • 若处于下半区,isOnTop保持false,文本回到底部。

内容的提问来源于stack exchange,提问作者JackSparrow135

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:15:34