void tilePages() { // Calculate which pages are visible var visibleBounds = pagingScrollView.Bounds; int firstNeededPageIndex = (int)Math.Floor(visibleBounds.GetMinX() / visibleBounds.Width); int lastNeededPageIndex = (int)Math.Floor((visibleBounds.GetMaxX()-1) / visibleBounds.Width); firstNeededPageIndex = Math.Max(firstNeededPageIndex, 0); lastNeededPageIndex = Math.Min(lastNeededPageIndex, this.imageCount - 1); // Recycle no-longer-visible pages foreach (var page in visiblePages) { if (page.index < firstNeededPageIndex || page.index > lastNeededPageIndex) { recycledPages.Add(page); page.RemoveFromSuperview(); } } // [visiblePages minusSet:recycledPages]; foreach (var item in recycledPages) { if (visiblePages.Contains(item)) { visiblePages.Remove(item); } } // add missing pages for (int index = firstNeededPageIndex; index <= lastNeededPageIndex; index++) { if (!this.isDisplayingPageForIndex(index)) { ImageScrollView page = this.dequeueRecycledPage(); if (page == null) { page = new ImageScrollView(frameForPageAtIndex(index)); // different from ObjC [CD] } this.configurePage (page, index); pagingScrollView.AddSubview (page); visiblePages.Add(page); } } }
void configurePage(ImageScrollView page, int index) { page.index = index; page.Frame = this.frameForPageAtIndex (index); if (useTiledImage) { // Use tiled images page.displayTiledImageNamed (this.imageNameAtIndex (index), this.imageSizeAtIndex(index)); } else { // To use full images instead of tiled images, replace the "displayTiledImageNamed:" call // above by the following line: page.displayImage (this.imageAtIndex (index)); } }