예제 #1
0
        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);
        }
예제 #2
0
        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;
        }