我想用SwiftUI制作一个视频时间轴.特别是,我希望用户能够水平拖动视频移动的时间.
为了做到这一点,我编写了以下代码:
ZStack {
Rectangle()
.fill(Color.black)
.frame(height: 350)
VStack(alignment: .leading, spacing: 5) {
HStack(spacing: 5) {
Button(action: {
print("Undo")
}) {
Image(systemName: "arrow.turn.up.left")
.foregroundColor(Color.gray)
.font(.system(size: 20))
}
Button(action: {
print("Add media")
}) {
Image(systemName: "plus")
.foregroundColor(Color.gray)
.font(.system(size: 20))
}
}
.offset(x: 110)
.padding(.horizontal, 10)
.padding(.top, 10)
HStack(spacing: 60) {
Text("00:00").foregroundColor(Color.white)
Text("00:02").foregroundColor(Color.white)
Text("00:04").foregroundColor(Color.white)
Text("00:06").foregroundColor(Color.white)
}
.offset(x: xOffset)
Rectangle()
.fill(Color.black)
.frame(height: 85)
HStack(spacing: 5) {
Rectangle()
.fill(Color.gray)
.frame(width: UIScreen.main.bounds.width, height: 60)
.cornerRadius(8)
Rectangle()
.fill(Color.gray)
.frame(width: UIScreen.main.bounds.width / 2, height: 60)
.cornerRadius(8)
}
.offset(x: xOffset)
Rectangle()
.fill(Color.black)
.frame(height: 130)
}
.gesture(
DragGesture()
.onChanged({ value in
xOffset = value.location.x
})
.onEnded({ _ in
print(xOffset)
})
)
}
}
它看起来像这样:
Demo个
问题是,当您在时间线上单击并拖动时,灰色矩形会移动到光标位置.在现实中,我想要的是当你点击时间线并拖动时,你在拖动时所做的位移应该会移动灰色的矩形.例如,如果我在x=100处单击并拖动到x=90,则灰色矩形应该移动x=-10.大概是这样的: