.= 'tag.htm'; break; case 'flag': $pre .= $default_pre .= 'flag.htm'; break; case 'my': $pre .= $default_pre .= 'my.htm'; break; case 'my_password': $pre .= $default_pre .= 'my_password.htm'; break; case 'my_bind': $pre .= $default_pre .= 'my_bind.htm'; break; case 'my_avatar': $pre .= $default_pre .= 'my_avatar.htm'; break; case 'home_article': $pre .= $default_pre .= 'home_article.htm'; break; case 'home_comment': $pre .= $default_pre .= 'home_comment.htm'; break; case 'user': $pre .= $default_pre .= 'user.htm'; break; case 'user_login': $pre .= $default_pre .= 'user_login.htm'; break; case 'user_create': $pre .= $default_pre .= 'user_create.htm'; break; case 'user_resetpw': $pre .= $default_pre .= 'user_resetpw.htm'; break; case 'user_resetpw_complete': $pre .= $default_pre .= 'user_resetpw_complete.htm'; break; case 'user_comment': $pre .= $default_pre .= 'user_comment.htm'; break; case 'single_page': $pre .= $default_pre .= 'single_page.htm'; break; case 'search': $pre .= $default_pre .= 'search.htm'; break; case 'operate_sticky': $pre .= $default_pre .= 'operate_sticky.htm'; break; case 'operate_close': $pre .= $default_pre .= 'operate_close.htm'; break; case 'operate_delete': $pre .= $default_pre .= 'operate_delete.htm'; break; case 'operate_move': $pre .= $default_pre .= 'operate_move.htm'; break; case '404': $pre .= $default_pre .= '404.htm'; break; case 'read_404': $pre .= $default_pre .= 'read_404.htm'; break; case 'list_404': $pre .= $default_pre .= 'list_404.htm'; break; default: $pre .= $default_pre .= theme_mode_pre(); break; } if ($config['theme']) { $conffile = APP_PATH . 'view/template/' . $config['theme'] . '/conf.json'; $json = is_file($conffile) ? xn_json_decode(file_get_contents($conffile)) : array(); } !empty($json['installed']) and $path_file = APP_PATH . 'view/template/' . $config['theme'] . '/htm/' . ($id ? $id . '_' : '') . $pre; (empty($path_file) || !is_file($path_file)) and $path_file = APP_PATH . 'view/template/' . $config['theme'] . '/htm/' . $pre; if (!empty($config['theme_child']) && is_array($config['theme_child'])) { foreach ($config['theme_child'] as $theme) { if (empty($theme) || is_array($theme)) continue; $path_file = APP_PATH . 'view/template/' . $theme . '/htm/' . ($id ? $id . '_' : '') . $pre; !is_file($path_file) and $path_file = APP_PATH . 'view/template/' . $theme . '/htm/' . $pre; } } !is_file($path_file) and $path_file = APP_PATH . ($dir ? 'plugin/' . $dir . '/view/htm/' : 'view/htm/') . $default_pre; return $path_file; } function theme_mode_pre($type = 0) { global $config; $mode = $config['setting']['website_mode']; $pre = ''; if (1 == $mode) { $pre .= 2 == $type ? 'portal_category.htm' : 'portal.htm'; } elseif (2 == $mode) { $pre .= 2 == $type ? 'flat_category.htm' : 'flat.htm'; } else { $pre .= 2 == $type ? 'index_category.htm' : 'index.htm'; } return $pre; } ?>ios - How to detect whether a SwiftUI gesture failed? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

ios - How to detect whether a SwiftUI gesture failed? - Stack Overflow

programmeradmin0浏览0评论

In the following example if only the long press will be performed, there is (apparently) no (built-in) way to find out that the drag gesture had failed (if I just lift my finger off the screen for example)

Is there a way to detect wether the second gesture had failed or hasn't been started?

.gesture(
    LongPressGesture()
        .onEnded { _ in
            // First gesture completed ...
        }
        .sequenced(
            before:
                DragGesture()
                    .onEnded { gesture in
                        // Second gesture ended (not called if it has failed) ...
                    }
        )
        .onEnded { _ in
           // Only called if both gestures succeed...
        }
)

In the following example if only the long press will be performed, there is (apparently) no (built-in) way to find out that the drag gesture had failed (if I just lift my finger off the screen for example)

Is there a way to detect wether the second gesture had failed or hasn't been started?

.gesture(
    LongPressGesture()
        .onEnded { _ in
            // First gesture completed ...
        }
        .sequenced(
            before:
                DragGesture()
                    .onEnded { gesture in
                        // Second gesture ended (not called if it has failed) ...
                    }
        )
        .onEnded { _ in
           // Only called if both gestures succeed...
        }
)
Share Improve this question edited Jan 30 at 14:34 Benzy Neez 22.5k3 gold badges15 silver badges43 bronze badges asked Jan 30 at 12:53 Petru LutencoPetru Lutenco 3594 silver badges14 bronze badges 1
  • Perhaps you could consider a position check to see whether the objects was moved your minimum desired distance – not_a_nerd Commented Jan 30 at 13:25
Add a comment  | 

1 Answer 1

Reset to default 2

You can use exclusively(before:) to achieve this effect. If you have A.exclusively(before: B), then SwiftUI will try to recognise gesture B only if A fails.

In this case, A would be the long press + drag gesture, and B would be just the long press gesture. If B is triggered, that means there is a long press but A failed, which implies that it is the drag gesture that failed.

.gesture(
    LongPressGesture()
        .onEnded { _ in
            print("Long press completed")
        }
        .sequenced(
            before: DragGesture()
                .onEnded { gesture in
                    print("Drag completed")
                }
        )
        .onEnded { x in
            print("Both completed")
        }
        .exclusively(
            before: LongPressGesture()
                .onEnded { _ in print("Drag failed") }
        )
)
发布评论

评论列表(0)

  1. 暂无评论