Esempio n. 1
0
        public async override void LayoutSubviews()
        {
            base.LayoutSubviews();

            // set correct page width
            if (pageWidth == -1)
            {
                pageWidth = Bounds.Width;
            }

            // simulate end of scrollView at right
            // condition to avoid new creations of views
            if (prevPageIndex >= rightIndexLimit)
            {
                prevPageIndex = PageIndex;
                if (PageIndex > rightIndexLimit)
                {
                    // disable user interaction
                    UserInteractionEnabled = false;

                    // animate scrollview to correct position
                    var offset = ContentOffset.X % pageWidth;
                    SetContentOffset(new CGPoint(ContentOffset.X - offset, ContentOffset.Y), true);

                    // wait for movement and enable user interaction
                    await Task.Delay(350);

                    UserInteractionEnabled = true;
                }
                return;
            }

            ContentSize          = new CGSize(pageWidth * 20, Bounds.Height);
            _containerView.Frame = new CGRect(0, 0, ContentSize.Width, ContentSize.Height);
            RecenterIfNeeded();

            // tile content in visible bounds
            CGRect visibleBounds   = ConvertRectToView(Bounds, _containerView);
            nfloat minimumVisibleX = CGRectGetMinX(visibleBounds);
            nfloat maximumVisibleX = CGRectGetMaxX(visibleBounds);

            TileViews(minimumVisibleX, maximumVisibleX);

            if (prevPageIndex != PageIndex)
            {
                prevPageIndex = PageIndex;
                if (OnChangePage != null)
                {
                    OnChangePage.Invoke(this, new EventArgs());
                }
            }
        }
Esempio n. 2
0
        public void RefreshVisibleView()
        {
            if (Dragging)
            {
                return;
            }

            var   currentView = pages.Find(v => v.Frame.X.CompareTo(ContentOffset.X) == 0);
            var   center      = currentView.Center;
            TView newView     = InsertView();
            var   offSetY     = ContentSize.Height;
            var   frame       = currentView.Frame;

            frame.Y      += offSetY;
            newView.Frame = frame;

            UIView.Animate(0.6, 0.4, UIViewAnimationOptions.CurveEaseIn, () => { currentView.Alpha = 0.25f; }, null);

            UIView.Animate(0.7, 0.5, UIViewAnimationOptions.CurveEaseIn,
                           () => {
                currentView.Transform = CGAffineTransform.MakeScale(0.75f, 0.75f);
                currentView.Center    = new CGPoint(center.X, center.Y + 105);
            }, null);

            UIView.Animate(0.7, 0.6, UIViewAnimationOptions.CurveEaseInOut,
                           () => {
                newView.Center = center;
            }, () => {
                foreach (var item in pages)
                {
                    viewSource.Dispose(item);
                    item.RemoveFromSuperview();
                }
                pages.Clear();
                pages.Add(newView);
                if (OnChangePage != null)
                {
                    OnChangePage.Invoke(this, new EventArgs());
                }
            });
        }