/// <summary> /// Called after the controller’s view is loaded into memory. /// </summary> public override void ViewDidLoad() { base.ViewDidLoad(); if (PageNumber == -1) { View.BackgroundColor = UIColor.Clear; } else { View = new PageView(_ViewFrame, _AutoScaleMode, PageNumber); } }
/// <summary> /// Called after the controller’s view is loaded into memory. /// </summary> public override void ViewDidLoad() { base.ViewDidLoad(); if (PageNumber == -1) { View.BackgroundColor = UIColor.Clear; } else { View = new PageView(_ViewFrame, PageNumber); } }
/// <summary> /// Sets equal zoomScale for all pages /// </summary> private void SetPagesEqualZoomScale(PageView pageView, float zoomScale) { foreach (var view in mPageViews) { if (view != pageView) { // Set equal zoomScale from all pageViews view.ZoomScale = zoomScale; // Offset pageView, to it don't overlapped view.ContentOffset = CalcDefaultPageViewContentOffset(); } } }
/// <summary> /// Opens document page /// </summary> /// <param name="pageNumber">Document page number</param> public virtual void OpenDocumentPage(int pageNumber) { if (PDFDocument.DocumentHasLoaded && (pageNumber != PDFDocument.CurrentPageNumber)) { if ((pageNumber < 1) || (pageNumber > PDFDocument.PageCount)) { return; } // Set current page PDFDocument.CurrentPageNumber = pageNumber; // Calc min, max page int minValue; int maxValue; if (PDFDocument.PageCount <= MaxPageViewsCount) { minValue = 1; maxValue = PDFDocument.PageCount; } else { minValue = PDFDocument.CurrentPageNumber - 1; maxValue = PDFDocument.CurrentPageNumber + 1; if (minValue < 1) { minValue++; maxValue++; } else if (maxValue > PDFDocument.PageCount) { minValue--; maxValue--; } } // Create/update page views for displayed pages var unusedPageViews = new List<PageView>(mPageViews); RectangleF viewRect = GetScrollViewSubViewFrame(); for (int i = minValue, j = 0; i <= maxValue; i++,j++) { PageView pageView = mPageViews.FirstOrDefault(v => v.PageNumber == i); if (pageView == null) { pageView = new PageView(viewRect, i); pageView.ZoomScale = mCurrentPageView != null ? mCurrentPageView.ZoomScale : pageView.MinimumZoomScale; pageView.ContentOffset = CalcDefaultPageViewContentOffset(); pageView.ZoomingEnded += delegate(object sender, ZoomingEndedEventArgs e) { SetPagesEqualZoomScale((PageView)sender, e.AtScale); }; mScrollView.AddSubview(pageView); mPageViews.Add(pageView); } else { pageView.Frame = viewRect; pageView.PageNumber = i; unusedPageViews.Remove(pageView); } viewRect = CalcFrameForNextPage(viewRect); if (i == PDFDocument.CurrentPageNumber) { mCurrentPageView = pageView; } } // Clear unused page views foreach (var view in unusedPageViews) { view.RemoveFromSuperview(); mPageViews.Remove(view); } // Update scroll view content offset UpdateScrollViewContentOffset(); // Update PageNumber label if (mPageNumberLabel != null) { mPageNumberLabel.Text = string.Format(@"{0}/{1}", PDFDocument.CurrentPageNumber, PDFDocument.PageCount); } // Update slider position if (mSlider != null) { mSlider.Value = PDFDocument.CurrentPageNumber; } } }