public void DisplayCurrentImageInScrollView() { foreach (UIView _subView in svImagePager.Subviews) { //Clear all previous subviews _subView.RemoveFromSuperview(); } //Load the current Image //------------------------- BusinessModel.Image _currentImageRecord = m_questionImagesList [m_currentImageDisplayIndex]; UIImage _currentImageDataToDisplay = UIImage.FromFile(_currentImageRecord.FilePath); UIImageView _currentImageViewToDisplay = new UIImageView(_currentImageDataToDisplay); _currentImageViewToDisplay.Frame = new RectangleF(0, 0, _currentImageDataToDisplay.Size.Width, _currentImageDataToDisplay.Size.Height); _currentImageViewToDisplay.UserInteractionEnabled = true; AttachImageViewTapGestureRecognizer(_currentImageViewToDisplay); RectangleF _currentImageScrollViewFrame = svImagePager.Frame; _currentImageScrollViewFrame.X = _currentImageScrollViewFrame.Width * m_currentImageDisplayIndex; _currentImageScrollViewFrame.Y = 0; svCurrentImageZoomView = new UIScrollView(_currentImageScrollViewFrame); svCurrentImageZoomView.AutoresizingMask = UIViewAutoresizing.All; svCurrentImageZoomView.BackgroundColor = m_imageBackgroundColor; svCurrentImageZoomView.ContentSize = _currentImageDataToDisplay.Size; svCurrentImageZoomView.AddSubview(_currentImageViewToDisplay); svCurrentImageZoomView.ViewForZoomingInScrollView = GetZoomedView; svCurrentImageZoomView.DidZoom += ZoomView_DidZoom; svImagePager.AddSubview(svCurrentImageZoomView); if (m_currentImageDisplayIndex > 0) { //Load previous image BusinessModel.Image _previousImageRecord = m_questionImagesList [m_currentImageDisplayIndex - 1]; UIImage _previousImageDataToDisplay = UIImage.FromFile(_previousImageRecord.FilePath); UIImageView _previousImageViewToDisplay = new UIImageView(_previousImageDataToDisplay); _previousImageViewToDisplay.Frame = new RectangleF(0, 0, _previousImageDataToDisplay.Size.Width, _previousImageDataToDisplay.Size.Height); _previousImageViewToDisplay.UserInteractionEnabled = true; AttachImageViewTapGestureRecognizer(_previousImageViewToDisplay); RectangleF _previousImageScrollViewFrame = svImagePager.Frame; _previousImageScrollViewFrame.X = _previousImageScrollViewFrame.Width * (m_currentImageDisplayIndex - 1); _previousImageScrollViewFrame.Y = 0; svPreviousImageZoomView = new UIScrollView(_previousImageScrollViewFrame); svPreviousImageZoomView.AutoresizingMask = UIViewAutoresizing.All; svPreviousImageZoomView.BackgroundColor = m_imageBackgroundColor; svPreviousImageZoomView.ContentSize = _previousImageDataToDisplay.Size; svPreviousImageZoomView.AddSubview(_previousImageViewToDisplay); svPreviousImageZoomView.ViewForZoomingInScrollView = GetZoomedView; svPreviousImageZoomView.DidZoom += ZoomView_DidZoom; svImagePager.AddSubview(svPreviousImageZoomView); } else { svPreviousImageZoomView = null; } if (m_currentImageDisplayIndex < m_questionImagesList.Count - 1) { //Load next image BusinessModel.Image _nextImageRecord = m_questionImagesList [m_currentImageDisplayIndex + 1]; UIImage _nextImageDataToDisplay = UIImage.FromFile(_nextImageRecord.FilePath); UIImageView _nextImageViewToDisplay = new UIImageView(_nextImageDataToDisplay); _nextImageViewToDisplay.Frame = new RectangleF(0, 0, _nextImageDataToDisplay.Size.Width, _nextImageDataToDisplay.Size.Height); _nextImageViewToDisplay.UserInteractionEnabled = true; AttachImageViewTapGestureRecognizer(_nextImageViewToDisplay); RectangleF _nextImageScrollViewFrame = svImagePager.Frame; _nextImageScrollViewFrame.X = _nextImageScrollViewFrame.Width * (m_currentImageDisplayIndex + 1); _nextImageScrollViewFrame.Y = 0; svNextImageZoomView = new UIScrollView(_nextImageScrollViewFrame); svNextImageZoomView.AutoresizingMask = UIViewAutoresizing.All; svNextImageZoomView.BackgroundColor = m_imageBackgroundColor; svNextImageZoomView.ContentSize = _nextImageDataToDisplay.Size; svNextImageZoomView.AddSubview(_nextImageViewToDisplay); svNextImageZoomView.ViewForZoomingInScrollView = GetZoomedView; svNextImageZoomView.DidZoom += ZoomView_DidZoom; svImagePager.AddSubview(svNextImageZoomView); } else { svNextImageZoomView = null; } svImagePager.SetContentOffset(new PointF(svImagePager.Frame.Width * m_currentImageDisplayIndex, 0), false); }
public void svImagePager_Scrolled(object sender, EventArgs e) { int _scrollViewDisplayIndex = (int)Math.Floor((svImagePager.ContentOffset.X + svImagePager.Frame.Width / 2) / svImagePager.Frame.Width); if (_scrollViewDisplayIndex == m_currentImageDisplayIndex) { return; } if (_scrollViewDisplayIndex == m_currentImageDisplayIndex + 1) { //Set the next image as current one and load the next one //----------------------------------------------------- //Remove the previous image scrollview from scrollview to save memory if (svPreviousImageZoomView != null) { svPreviousImageZoomView.RemoveFromSuperview(); } //Set the previous image scrollview to the current one and set the current image scroll view to use the next one svPreviousImageZoomView = svCurrentImageZoomView; svCurrentImageZoomView = svNextImageZoomView; m_currentImageDisplayIndex++; if (m_currentImageDisplayIndex < m_questionImagesList.Count - 1) { //Load the next image to the scrollview BusinessModel.Image _nextImageRecord = m_questionImagesList [m_currentImageDisplayIndex + 1]; UIImage _nextImageDataToDisplay = UIImage.FromFile(_nextImageRecord.FilePath); UIImageView _nextImageViewToDisplay = new UIImageView(_nextImageDataToDisplay); _nextImageViewToDisplay.Frame = new RectangleF(0, 0, _nextImageDataToDisplay.Size.Width, _nextImageDataToDisplay.Size.Height); _nextImageViewToDisplay.UserInteractionEnabled = true; AttachImageViewTapGestureRecognizer(_nextImageViewToDisplay); RectangleF _nextImageScrollViewFrame = svImagePager.Frame; _nextImageScrollViewFrame.X = _nextImageScrollViewFrame.Width * (m_currentImageDisplayIndex + 1); _nextImageScrollViewFrame.Y = 0; svNextImageZoomView = new UIScrollView(_nextImageScrollViewFrame); svNextImageZoomView.AutoresizingMask = UIViewAutoresizing.All; svNextImageZoomView.BackgroundColor = m_imageBackgroundColor; svNextImageZoomView.ContentSize = _nextImageDataToDisplay.Size; svNextImageZoomView.AddSubview(_nextImageViewToDisplay); svNextImageZoomView.ViewForZoomingInScrollView = GetZoomedView; svNextImageZoomView.DidZoom += ZoomView_DidZoom; svImagePager.AddSubview(svNextImageZoomView); CenterNextScrollViewImages(); SetZoomForNextScrollView(); } else { //There is no next image available svNextImageZoomView = null; } } else if (_scrollViewDisplayIndex == m_currentImageDisplayIndex - 1) { //Set the previous image as current one and load the one before the previous image //----------------------------------------------------- //Remove the next image scrollview from scrollview to save memory if (svNextImageZoomView != null) { svNextImageZoomView.RemoveFromSuperview(); } //Set the next image scrollview to the current one and set the current image scroll view to use the previous one svNextImageZoomView = svCurrentImageZoomView; svCurrentImageZoomView = svPreviousImageZoomView; m_currentImageDisplayIndex--; if (m_currentImageDisplayIndex > 0) { //Load previous image BusinessModel.Image _previousImageRecord = m_questionImagesList [m_currentImageDisplayIndex - 1]; UIImage _previousImageDataToDisplay = UIImage.FromFile(_previousImageRecord.FilePath); UIImageView _previousImageViewToDisplay = new UIImageView(_previousImageDataToDisplay); _previousImageViewToDisplay.Frame = new RectangleF(0, 0, _previousImageDataToDisplay.Size.Width, _previousImageDataToDisplay.Size.Height); _previousImageViewToDisplay.UserInteractionEnabled = true; AttachImageViewTapGestureRecognizer(_previousImageViewToDisplay); RectangleF _previousImageScrollViewFrame = svImagePager.Frame; _previousImageScrollViewFrame.X = _previousImageScrollViewFrame.Width * (m_currentImageDisplayIndex - 1); _previousImageScrollViewFrame.Y = 0; svPreviousImageZoomView = new UIScrollView(_previousImageScrollViewFrame); svPreviousImageZoomView.AutoresizingMask = UIViewAutoresizing.All; svPreviousImageZoomView.BackgroundColor = m_imageBackgroundColor; svPreviousImageZoomView.ContentSize = _previousImageDataToDisplay.Size; svPreviousImageZoomView.AddSubview(_previousImageViewToDisplay); svPreviousImageZoomView.ViewForZoomingInScrollView = GetZoomedView; svPreviousImageZoomView.DidZoom += ZoomView_DidZoom; svImagePager.AddSubview(svPreviousImageZoomView); CenterPreviousScrollViewImages(); SetZoomForPreviousScrollView(); } else { svPreviousImageZoomView = null; } } else { throw new Exception("Scroll view index should only return the image before or after the current image"); } this.Title = "Figure " + m_questionImagesList [m_currentImageDisplayIndex].Title; navBar.TopItem.Title = this.Title; }