다음 코드는 크로스 디졸브로 애니메이션 된 탭 변경으로 사용자가 스 와이프하는 동작에 응답합니다. 각 방향에 대해 iOS 을 추가하는 TabbedPage
용 사용자 정의 렌더러를 만듭니다.
제스처 인식기는 페이지의 다른 제스처와 동시에 작동합니다. 그렇지 않으면 스크롤과 같은 페이지 제스처는 제스처가 완전히 수평이 아닌 경우 스 와이프 제스처가 작동하지 않도록하지만 자체적으로 작동하지 않습니다 (그렇지 않으면 한 번 스 와이프가 페이지). 개선을위한
[assembly: ExportRenderer(typeof(TabbedPage), typeof(SwipeTabbedRenderer))]
class SwipeTabbedRenderer : TabbedRenderer
{
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
NativeView.AddGestureRecognizer(new UISwipeGestureRecognizer(() => SelectNextTab(1)) { Direction = UISwipeGestureRecognizerDirection.Left, ShouldRecognizeSimultaneously = ShouldRecognizeSimultaneously });
NativeView.AddGestureRecognizer(new UISwipeGestureRecognizer(() => SelectNextTab(-1)) { Direction = UISwipeGestureRecognizerDirection.Right, ShouldRecognizeSimultaneously = ShouldRecognizeSimultaneously });
}
void SelectNextTab(int direction)
{
int nextIndex = TabbedPage.GetIndex(Tabbed.CurrentPage) + direction;
if (nextIndex < 0 || nextIndex >= Tabbed.Children.Count) return;
var nextPage = Tabbed.Children[nextIndex];
UIView.Transition(Platform.GetRenderer(Tabbed.CurrentPage).NativeView, Platform.GetRenderer(nextPage).NativeView, 0.15, UIViewAnimationOptions.TransitionCrossDissolve, null);
Tabbed.CurrentPage = nextPage;
}
static bool ShouldRecognizeSimultaneously(UIGestureRecognizer gestureRecognizer, UIGestureRecognizer otherGestureRecognizer) => gestureRecognizer != otherGestureRecognizer;
}
기회 : 십자가 용해보다은 슬라이드 제스처가 더 나은 것,하지만 난 하나를 만들 CATransition을 사용하려고 할 때, 애니메이션의 초기 상태가 빈 페이지가 아닌 페이지이었다 시작 탭. 이로 인해 애니메이션의 느낌이 약간 떨리게되었습니다.