This repository was archived by the owner on May 1, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathCarouselViewRenderer.cs
91 lines (75 loc) · 2.27 KB
/
CarouselViewRenderer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.ComponentModel;
using Foundation;
namespace Xamarin.Forms.Platform.iOS
{
public class CarouselViewRenderer : ItemsViewRenderer<CarouselView, CarouselViewController>
{
CarouselView Carousel => Element;
ItemsViewLayout _layout;
[Preserve(Conditional = true)]
public CarouselViewRenderer()
{
}
protected override CarouselViewController CreateController(CarouselView newElement, ItemsViewLayout layout)
{
return new CarouselViewController(newElement, layout);
}
protected override void ScrollToRequested(object sender, ScrollToRequestEventArgs args)
{
if (Carousel?.Loop == true)
{
var goToIndexPath = Controller.GetScrollToIndexPath(args.Index);
if (!IsIndexPathValid(goToIndexPath))
{
return;
}
Controller.CollectionView.ScrollToItem(goToIndexPath,
args.ScrollToPosition.ToCollectionViewScrollPosition(_layout.ScrollDirection),
args.IsAnimated);
}
else
{
base.ScrollToRequested(sender, args);
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs changedProperty)
{
base.OnElementPropertyChanged(sender, changedProperty);
if (changedProperty.Is(CarouselView.PeekAreaInsetsProperty))
{
(Controller.Layout as CarouselViewLayout)?.UpdateConstraints(Frame.Size);
Controller.Layout.InvalidateLayout();
}
else if (changedProperty.Is(CarouselView.IsSwipeEnabledProperty))
UpdateIsSwipeEnabled();
else if (changedProperty.Is(CarouselView.IsBounceEnabledProperty))
UpdateIsBounceEnabled();
}
protected override ItemsViewLayout SelectLayout() =>
_layout = new CarouselViewLayout(Carousel.ItemsLayout, Carousel);
protected override void SetUpNewElement(CarouselView newElement)
{
base.SetUpNewElement(newElement);
UpdateIsSwipeEnabled();
UpdateIsBounceEnabled();
}
protected override void TearDownOldElement(CarouselView oldElement)
{
Controller?.TearDown();
base.TearDownOldElement(oldElement);
}
void UpdateIsSwipeEnabled()
{
if (Carousel == null)
return;
Controller.CollectionView.ScrollEnabled = Carousel.IsSwipeEnabled;
}
void UpdateIsBounceEnabled()
{
if (Carousel == null)
return;
Controller.CollectionView.Bounces = Carousel.IsBounceEnabled;
}
}
}