/// <summary> /// Working. /// </summary> public PageView(RectangleF frame, AutoScaleModes autoScaleMode, int pageNumber) : base(frame) { // Init page scroll view ScrollsToTop = false; DelaysContentTouches = false; ShowsVerticalScrollIndicator = false; ShowsHorizontalScrollIndicator = false; ContentMode = UIViewContentMode.Redraw; AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight; UserInteractionEnabled = true; AutosizesSubviews = false; BackgroundColor = UIColor.Clear; ViewForZoomingInScrollView = delegate(UIScrollView sender) { return(_PageContentContainerView); }; AutoScaleMode = autoScaleMode; NeedUpdateZoomAndOffset = true; // Create and init (calc frame size) page content view _PageContentView = new PageContentView(PageContentView.GetPageViewSize(pageNumber), pageNumber); // Create and init page content container view _PageContentContainerView = new UIView(_PageContentView.Bounds); _PageContentContainerView.AutosizesSubviews = false; _PageContentContainerView.UserInteractionEnabled = false; _PageContentContainerView.ContentMode = UIViewContentMode.Redraw; _PageContentContainerView.AutoresizingMask = UIViewAutoresizing.None; _PageContentContainerView.Layer.CornerRadius = 5; _PageContentContainerView.Layer.ShadowOffset = new SizeF(2.0f, 2.0f); _PageContentContainerView.Layer.ShadowRadius = 4.0f; _PageContentContainerView.Layer.ShadowOpacity = 1.0f; _PageContentContainerView.Layer.ShadowPath = UIBezierPath.FromRect(_PageContentContainerView.Bounds).CGPath; _PageContentContainerView.BackgroundColor = UIColor.White; // Create and init page thumb view //_ThumbView = new ThumbView(_PageContentView.Bounds, ThumbContentSize, pageNumber); // Add views to parents //_PageContentContainerView.AddSubview(_ThumbView); _PageContentContainerView.AddSubview(_PageContentView); AddSubview(_PageContentContainerView); // Set content size, offset and inset ContentSize = _PageContentView.Bounds.Size; ContentOffset = new PointF((0.0f - ContentViewPadding), (0.0f - ContentViewPadding)); ContentInset = new UIEdgeInsets(ContentViewPadding, ContentViewPadding, ContentViewPadding, ContentViewPadding); ContentSize = _PageContentContainerView.Bounds.Size; }
/// <summary> /// Returns thumb image object for page /// </summary> /// <param name="thumbContentSize">Thumb content size</param> /// <param name="pageNumber">Page number for what will created image object</param> /// <returns>Page image object</returns> private static UIImage GetThumbImage(float thumbContentSize, int pageNumber) { if ((pageNumber <= 0) || (pageNumber > PDFDocument.PageCount)) { return(null); } // Calc page view size var pageSize = PageContentView.GetPageViewSize(pageNumber); if (pageSize.Width % 2 > 0) { pageSize.Width--; } if (pageSize.Height % 2 > 0) { pageSize.Height--; } // Calc target size var targetSize = new Size((int)pageSize.Width, (int)pageSize.Height); // Draw page on CGImage CGImage pageImage; using (CGColorSpace rgb = CGColorSpace.CreateDeviceRGB()) { using (var context = new CGBitmapContext(null, targetSize.Width, targetSize.Height, 8, 0, rgb, CGBitmapFlags.ByteOrder32Little | CGBitmapFlags.NoneSkipFirst)) { using (var pdfPage = PDFDocument.GetPage(pageNumber)) { // Draw page on custom CGBitmap context var thumbRect = new RectangleF(0.0f, 0.0f, targetSize.Width, targetSize.Height); context.SetFillColor(1.0f, 1.0f, 1.0f, 1.0f); context.FillRect(thumbRect); context.ConcatCTM(pdfPage.GetDrawingTransform(CGPDFBox.Crop, thumbRect, 0, true)); context.SetRenderingIntent(CGColorRenderingIntent.Default); context.InterpolationQuality = CGInterpolationQuality.Default; context.DrawPDFPage(pdfPage); // Create CGImage from custom CGBitmap context pageImage = context.ToImage(); } } } return(UIImage.FromImage(pageImage)); }