Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Ios 快捷界面处理按钮/视图,带ONTAPPORATE和ONLONGPRESSORATE,带释放动作_Ios_Button_Swiftui_Gesture - Fatal编程技术网

Ios 快捷界面处理按钮/视图,带ONTAPPORATE和ONLONGPRESSORATE,带释放动作

Ios 快捷界面处理按钮/视图,带ONTAPPORATE和ONLONGPRESSORATE,带释放动作,ios,button,swiftui,gesture,Ios,Button,Swiftui,Gesture,我有一个同时具有ONTAPSERTIVE和ONLONGPRESSERTIVE的视图。问题是,我的onLongPressPicture的实现阻止了对onTapPicture的调用 这里有一些代码 View() .onTapGesture { action_1 } .onLongPressGesture(minimumDuration: 0.5, maximumDistance: 10, pressing: {

我有一个同时具有ONTAPSERTIVE和ONLONGPRESSERTIVE的视图。问题是,我的onLongPressPicture的实现阻止了对onTapPicture的调用

这里有一些代码

View()
      .onTapGesture {
           action_1
       }
      .onLongPressGesture(minimumDuration: 0.5, maximumDistance: 10, pressing: {
                                    pressing in
                                    self.isPressing = pressing
                                    if (pressing) {action_2}
                                    if !pressing {action_3}
                                }, perform: {})
.onLongPress手势中的pressing参数检测用户是否正在按view/按钮,并且无论最短持续时间是多少,都将始终执行.onLongPress手势。

Edit Snapchat快门,您可以点击它来拍照,按住按钮开始录制视频,然后松开按钮停止录制视频。这就是为什么需要执行三个操作

这很棘手。以下是我所做的:

  • ontap手势
    ,用于点击手势
  • 长按手势
    ,延时0.5秒。0.5秒结束后(
    .oned
    ),开始录制
  • DragGesture
    ,用于观察手指何时离开屏幕。发生这种情况时,请停止录制
  • 结果:


    旧答案:
    参数不用于执行
    操作2
    之类的操作。可以,但它更常用于更改
    @状态
    ,例如,按下时以绿色突出显示视图。您可以在中找到更多信息

    相反,您可能希望在
    执行
    闭包中调用您的操作(
    action_2
    /
    print(“long”)

    struct ContentView: View {
        var body: some View {
            Text("Hi")
                .font(.title)
                .onTapGesture {
                    print("tap")
                }
                .onLongPressGesture(minimumDuration: 0.5, maximumDistance: 10) {
                    print("long")
                }
        }
    }
    
    结果:


    唯一的问题是,我希望在启动长点击时执行一个操作,然后在释放长点击时启动另一个操作,这个答案不适用于该用例。@BestFromAbove获得了它。如果找到解决方案,将编辑我的答案。帮助您理解的一个示例是Snapchat快门,您可以点击快门拍照,按住按钮开始录制视频,然后松开按钮停止录制视频。这就是为什么需要执行三个操作的原因。@BestFrom请参见我的editGreat变通方法!这将是官方的答案,直到有一个更正式的方式来处理这些事件!我感谢你在这方面的帮助。
    struct ContentView: View {
        var body: some View {
            Text("Hi")
                .font(.title)
                .onTapGesture {
                    print("tap")
                }
                .onLongPressGesture(minimumDuration: 0.5, maximumDistance: 10) {
                    print("long")
                }
        }
    }