Ios SwiftUI:水平滚动视图动画&x2B;手势
我正在尝试重新创建“展开应用程序订阅”屏幕,屏幕上的图像水平旋转,这些图像自动从右向左移动,并启用向右或向左移动的手势,然后动画再次继续 我找到了一种使用3个修改器设置水平滚动视图动画的方法:Ios SwiftUI:水平滚动视图动画&x2B;手势,ios,swift,animation,swiftui,scrollview,Ios,Swift,Animation,Swiftui,Scrollview,我正在尝试重新创建“展开应用程序订阅”屏幕,屏幕上的图像水平旋转,这些图像自动从右向左移动,并启用向右或向左移动的手势,然后动画再次继续 我找到了一种使用3个修改器设置水平滚动视图动画的方法: 抵消 动画 外观 但是,当我拖动旋转木马时,我找不到方法将x坐标更改为我离开的位置 如果有人知道如何解决这个问题,那就可以救命了 以下是我编写的SwiftUI代码: import SwiftUI import AVKit struct ContentView: View { @S
- 抵消
- 动画
- 外观
import SwiftUI
import AVKit
struct ContentView: View {
@State var scrollText = false
var body: some View {
ZStack {
VStack {
Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1))
.ignoresSafeArea(.all)
}
VStack {
VideoPlayer(player: AVPlayer(url: Bundle.main.url(forResource: "wave-1", withExtension: "mp4")!)) {
VStack {
Image("pro-text")
.resizable()
.frame(width: 150, height: .infinity)
.scaledToFit()
}
}
.ignoresSafeArea(.all)
.frame(width: .infinity, height: 300)
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 5) {
Image("benefit-1")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-2")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-3")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-4")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-5")
.resizable()
.frame(width: 120, height: 120)
}
.offset(x: scrollText ? -500 : 20)
.animation(Animation.linear(duration: 30).repeatForever(autoreverses: false))
.onAppear() {
self.scrollText.toggle()
}
}
Spacer()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
在这里分享我另一篇文章的答案 因为duration似乎还不能与动画一起使用,所以我必须稍微修改一下才能获得我想要的动画效果 以下是我所做的:
import SwiftUI
import AVKit
struct ProView: View {
@State private var scrollText = false
var body: some View {
ZStack {
// VStack {
// Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1))
// .ignoresSafeArea(.all)
// }
//
// VStack {
//
// VideoPlayer(player: AVPlayer(url: Bundle.main.url(forResource: "wave-1", withExtension: "mp4")!)) {
// VStack {
// Image("pro-text")
// .resizable()
// .frame(width: 200, height: .infinity)
// .scaledToFit()
// }
// }
// .ignoresSafeArea(.all)
// .frame(width: .infinity, height: 300)
ScrollView(.horizontal, showsIndicators: false) {
ScrollViewReader { value in
HStack(spacing: 5) {
ForEach(0 ..< 100) { i in
HStack {
Image("benefit-1")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-2")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-3")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-4")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-5")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-6")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-7")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-8")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-9")
.resizable()
.frame(width: 120, height: 120)
Image("benefit-10")
.resizable()
.frame(width: 120, height: 120)
}
.id(i)
}
}
.offset(x: scrollText ? -10000 : 20)
.animation(Animation.linear(duration: 300).repeatForever(autoreverses: false))
.onAppear() {
value.scrollTo(50, anchor: .trailing)
scrollText.toggle()
}
}
}
Spacer()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ProView()
}
}
导入快捷界面
进口AVKit
结构唯冠:视图{
@State private var scrollText=false
var body:一些观点{
ZStack{
//VStack{
//颜色(#colorLiteral(红色:0,绿色:0,蓝色:0,阿尔法:1))
//.ignoresSafeArea(.all)
// }
//
//VStack{
//
//视频播放器(播放器:AVPlayer(url:Bundle.main.url)(用于资源:“wave-1”,带扩展名:“mp4”)!){
//VStack{
//图像(“专业文本”)
//.可调整大小()
//.frame(宽度:200,高度:无穷大)
//.scaledofit()
// }
// }
//.ignoresSafeArea(.all)
//.frame(宽度:。无穷大,高度:300)
滚动视图(.horizontal,showsIndicators:false){
ScrollViewReader{中的值
HStack(间距:5){
ForEach(0..<100){i in
HStack{
图像(“效益-1”)
.可调整大小()
.框架(宽度:120,高度:120)
图像(“效益-2”)
.可调整大小()
.框架(宽度:120,高度:120)
图像(“效益-3”)
.可调整大小()
.框架(宽度:120,高度:120)
形象(“利益-4”)
.可调整大小()
.框架(宽度:120,高度:120)
图像(“效益-5”)
.可调整大小()
.框架(宽度:120,高度:120)
图像(“效益-6”)
.可调整大小()
.框架(宽度:120,高度:120)
图像(“效益-7”)
.可调整大小()
.框架(宽度:120,高度:120)
图像(“效益-8”)
.可调整大小()
.框架(宽度:120,高度:120)
图像(“效益-9”)
.可调整大小()
.框架(宽度:120,高度:120)
形象(“利益-10”)
.可调整大小()
.框架(宽度:120,高度:120)
}
.id(i)
}
}
.偏移量(x:scrollText?-10000:20)
.animation(animation.linear(持续时间:300)。repeatForever(自动反转:false))
.onAppear(){
值。滚动到(50,锚点:。尾部)
scrollText.toggle()
}
}
}
垫片()
}
}
}
}
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
唯冠()
}
}
在这里分享我另一篇文章的答案
因为duration似乎还不能与动画一起使用,所以我必须稍微修改一下才能获得我想要的动画效果
以下是我所做的: