我會建議實施的自定義呈現WebView
並將手勢識別器附加到基礎UIWebView
。用於iOS的This is how the WebViewRenderer
在Xamarin Forms中實現。
Xamarin表格WebView
實際上是iOS上的UIWebView
。因此,您可以在渲染器中根據以下答案實施Swift代碼:https://stackoverflow.com/a/32012660/6192895。這斯威夫特代碼轉換爲C#是相當瑣碎,但是這也是一個潛在的解決方案:
,基本解決方案
public class SwipeWebViewRenderer : WebViewRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
var view = NativeView as UIWebView;
var swipeBackRecognizer = new UISwipeGestureRecognizer(HandleSwipeBack);
swipeBackRecognizer.Direction = UISwipeGestureRecognizerDirection.Right;
view.AddGestureRecognizer(swipeBackRecognizer);
}
void HandleSwipeBack()
{
(Element as WebView).GoBack();
}
}
該解決方案是非常基本的,它只是做了GoBack的()動作,而無需實際顯示像正常的Safari瀏覽器一樣的頁面輕掃功能。所以你可能需要添加更多的代碼,如果這是你需要的。
過渡
您可以使用CoreAnimation的這一點。使用此爲您HandleSwipeBack
方法:
void HandleSwipeBack()
{
CATransition animation = new CATransition();
animation.Type = CAAnimation.TransitionPush;
animation.Subtype = CAAnimation.TransitionFromLeft;
animation.Duration = 0.50;
animation.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);
(NativeView as UIWebView).Layer.AddAnimation(animation, CALayer.Transition);
(Element as WebView).GoBack();
}
這會不會讓你完全相同的行爲,Safari瀏覽器,因爲如果停止刷卡中途例如,它不會取消動畫。有可能這樣做,但它需要更多的代碼。
的額外信息
您可能還能夠從this Pull Request for a SwipeGestureRecognizer,因爲單元測試和UI測試不翼而飛這是不包括在Xamarin形式得出一些啓示。
不幸的是,默認的Xamarin Forms手勢識別器目前僅限於點擊,捏和平移。
到目前爲止,謝謝你,它工作正常!他們有什麼辦法實施軟轉型? – localhorst27
我已經用一個過渡示例更新了答案。如果這是你需要的,請務必接受答案。 –