ClanceysLib.ScrollViewWithHeader.SetupController C# (CSharp) Method

SetupController() public method

public SetupController ( RectangleF rect, UIView header, UIView rowHeader, UIView content, bool enableZoom ) : void
rect System.Drawing.RectangleF
header UIView
rowHeader UIView
content UIView
enableZoom bool
return void
        public void SetupController(RectangleF rect, UIView header, UIView rowHeader, UIView content, bool enableZoom)
        {
            _content = content;
            _headerContent = header;
            _rowHeaderContent = rowHeader;

            _headerDelegate = new MyScrollViewDelegate();
            _headerDelegate.theView = _headerContent;
            _rHeaderDelegate = new MyScrollViewDelegate();
            if (rowHeader != null)
                _rHeaderDelegate.theView = _rowHeaderContent;
            _mainContentDelegate = new MyScrollViewDelegate();
            _mainContentDelegate.theView = _content;

            float minZoom = .4f;
            float maxZoom = 1.3f;

            SizeF hSize = header.Frame.Size;
            SizeF cSize = content.Frame.Size;
            SizeF rSize;
            if (rowHeader != null)
                rSize = rowHeader.Frame.Size;
            else
                rSize = new SizeF(0, 0);
            //Set the content width to match the top header width
            if (hSize.Width > cSize.Width)
                cSize.Width = hSize.Width;
            else
                hSize.Width = cSize.Width;
            // Set the content height to match the
            if (rSize.Height > cSize.Height)
                cSize.Height = rSize.Height;
            else
                rSize.Height = cSize.Height;
            // Create the viewable size based off of the current frame;
            var hRect = new RectangleF(rSize.Width, 0, rect.Width - rSize.Width, hSize.Height);
            var cRect = new RectangleF(rSize.Width, hSize.Height, rect.Width - rSize.Width, rect.Height - hSize.Height);
            var rRect = new RectangleF(0, hSize.Height, rSize.Width, rect.Height - hSize.Height);
            _headerFrame = hRect;
            _rHeaderFrame = rRect;

            _header = new UIScrollView(hRect);
            _header.ContentSize = hSize;
            _header.Bounces = false;
            // Hide scroll bars on the headers
            _header.ShowsVerticalScrollIndicator = false;
            _header.ShowsHorizontalScrollIndicator = false;
            if (enableZoom)
            {
                // Sets the zoom level
                _header.MaximumZoomScale = maxZoom;
                _header.MinimumZoomScale = minZoom;
                // create a delegate to return the zoom image.
                //_header.ViewForZoomingInScrollView += delegate {return _headerContent;};
            }

            _headerDelegate.Scrolling += delegate
                                             {
                                                 if (!_mainContent.Zooming && !isZooming)
                                                 {
                                                     scrollContent();
                                                     scrollHeader();
                                                 }
                                             };
            _header.Delegate = _headerDelegate;
            _header.AddSubview(header);

            _mainContent = new UIScrollView(cRect);
            _mainContent.ContentSize = cSize;
            _mainContent.AddSubview(content);
            _mainContent.Bounces = false;
            ContentSize = cRect.Size;
            if (enableZoom)
            {
                _mainContent.MaximumZoomScale = maxZoom;
                _mainContent.MinimumZoomScale = minZoom;
                _mainContent.BouncesZoom = false;
                // create a delegate to return the zoom image.
                //_mainContent.ViewForZoomingInScrollView += delegate {return _content;};

                _mainContentDelegate.ZoomStarted += delegate
                                                        {
                                                            //Tell the class you are zooming
                                                            isZooming = true;
                                                            ZoomHeader();
                                                        };
                _mainContentDelegate.ZoomEnded += delegate
                                                      {
                                                          ZoomHeader();
                                                          isZooming = false;
                                                          // Rescroll the content to make sure it lines up with the header
                                                            if(Zoomed != null)
                                                                Zoomed();
                                                          //scrollContent();
                                                      };
            }

            _mainContentDelegate.Scrolling += delegate
                                                  {
                                                      scrollHeader();
                                                      ZoomHeader();
                                                      //Rescroll the content to make sure it lines up with the header
                                                      if (!_mainContent.Zooming && !isZooming)
                                                          scrollContent();
                                                        this.ContentOffset =  _mainContent.ContentOffset;
                                                        if(this.Scrolled != null)
                                                            Scrolled(this,null);
                                                  };
            _mainContent.Delegate = _mainContentDelegate;

            _rowHeader = new UIScrollView(rRect);
            _rowHeader.ContentSize = rSize;
            _rowHeader.Bounces = false;
            if (enableZoom)
            {
                _rowHeader.MaximumZoomScale = maxZoom;
                _rowHeader.MinimumZoomScale = minZoom;
                //if (rowHeader != null)
                //_rowHeader.ViewForZoomingInScrollView += delegate {return _rowHeaderContent;};
            }
            // Hide scroll bars on the headers
            _rowHeader.ShowsVerticalScrollIndicator = false;
            _rowHeader.ShowsHorizontalScrollIndicator = false;
            if (rowHeader != null)
                _rowHeader.AddSubview(rowHeader);

            _rHeaderDelegate.Scrolling += delegate
                                              {
                                                  if (!_mainContent.Zooming && !isZooming)
                                                      scrollContent();
                                              };
            _rowHeader.Delegate = _rHeaderDelegate;

            AddSubview(_header);
            AddSubview(_rowHeader);
            AddSubview(_mainContent);
        }