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);
}