Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 点击图像快捷界面上的动画_Swift_Image_Animation_Swiftui_Gesture - Fatal编程技术网

Swift 点击图像快捷界面上的动画

Swift 点击图像快捷界面上的动画,swift,image,animation,swiftui,gesture,Swift,Image,Animation,Swiftui,Gesture,如何在图像上制作动画,以便当我点击并按住它时向后缩放,当我释放它时,图像返回到其原始大小 struct ContentView: View { var body: some View { Image(systemName: "heart") .onTapGesture { // Gesture when held down and released } } } 下面是一个可能的解决方案演示。使用

如何在图像上制作动画,以便当我点击并按住它时向后缩放,当我释放它时,图像返回到其原始大小

struct ContentView: View {
    var body: some View {
        Image(systemName: "heart")
        .onTapGesture {
        // Gesture when held down and released
        }
    }
}

下面是一个可能的解决方案演示。使用Xcode 12/iOS 14进行测试


不错。我甚至不知道
@GestureState
属性包装器存在。谢谢这很好,唯一的问题是它有点慢…我如何加快动画速度?@xmetal更改动画部分,例如
.animation(.easeInOut(duration:0.3))
@pawello2222我刚刚意识到这里可能会改变的是长按手势。我尝试使用TapPassive,因为我需要在单击图像时立即查看动画,但如果这样做,则会丢失scaleEffect动画so@xmetal,Tapperstation是瞬时的,因此不适用于您的情况。尝试将
长按手势(minDuration:)
调整为更新状态,以及任何其他修改器,如上述动画。
struct DemoImageScale: View {
    @GestureState private var isDetectingPress = false

    var body: some View {
        Image("plant")
            .resizable().aspectRatio(contentMode: .fit)
            .scaleEffect(isDetectingPress ? 0.5 : 1)
            .animation(.spring())
            .gesture(LongPressGesture(minimumDuration: 0.1).sequenced(before:DragGesture(minimumDistance: 0))
                .updating($isDetectingPress) { value, state, _ in
                    switch value {
                        case .second(true, nil):
                            state = true
                        default:
                            break
                    }
            })
    }
}