Cambiar el color de los puntos UIPageControl en MonoTouch

Me preguntaba si MonoTouch le permite al desarrollador cambiar el color de los puntos de UIPageControl para adaptarse a un background claro: parecen ser blancos fijos, lo que los hace muy difíciles de ver en un background con textura ligera.

Soy consciente de que no hay una API pública disponible para esto, pero me preguntaba si algo se implementó internamente en MonoTouch para mejorar esto.

De lo contrario, ¿cuál es el enfoque recomendado para usar un UIPageControl en un background claro?

Tomé una puñalada para traducir esto. No estoy seguro de que funcione, pero comstack. Tenga en count que la página vinculada contiene comentarios que indican que Apple frunce el ceño sobre este código y puede rechazarlo:

using System; using MonoTouch.Foundation; using MonoTouch.UIKit; namespace Whatever { public class StyledPageControl : UIPageControl { public StyledPageControl () : base() { } public override int CurrentPage { get { return base.CurrentPage; } set { base.CurrentPage = value; string imgActive = NSBundle.MainBundle.PathForResource("activeImage", "png"); string imgInactive = NSBundle.MainBundle.PathForResource("inactiveImage", "png"); for (int subviewIndex = 0; subviewIndex < this.Subviews.Length; subviewIndex++) { UIImageView subview = this.Subviews[subviewIndex] as UIImageView; if (subviewIndex == value) subview.Image = UIImage.FromFile(imgActive); else subview.Image = UIImage.FromFile(imgInactive); } } } public override int Pages { get { return base.Pages; } set { base.Pages = value; string img = NSBundle.MainBundle.PathForResource("inactiveImage", "png"); for (int subviewIndex = 0; subviewIndex < this.Subviews.Length; subviewIndex++) { UIImageView subview = this.Subviews[subviewIndex] as UIImageView; subview.Image = UIImage.FromFile(img); } } } } } 

Combiné esto y esto para monotouch. Espero que esto ayude.

El uso es así:

 _pager.Change += delegate(object sender, EventArgs e) { var pc = sender as PageControl; Console.WriteLine ("Change Delegate== " + pc.currentPage); var toPage = pc.currentPage; var pageOffset = _scroll.Frame.Width*toPage; PointF p = new PointF(pageOffset, 0); Console.WriteLine (pageOffset); _scroll.SetContentOffset(p,true); }; 

Y la class así.

 public class PageControl:UIView { #region ctor public PageControl (RectangleF rect) :base(rect) { this.BackgroundColor = UIColor.Red; this.CurrenColor=new CGColor(.2f,15f,10F); this.OtherColor =new CGColor(.77F,.71F,.60F); } #endregion #region Fields float kDotDiameter= 7.0f; float kDotSpacer = 7.0f; int _currentPage; int _numberOfPages; CGColor CurrenColor{get;set;} CGColor OtherColor{get;set;} public int currentPage { set { _currentPage = Math.Min(Math.Max(0, value),_numberOfPages-1); this.SetNeedsDisplay(); } get{return _currentPage;} } public int numberOfPages { set { _numberOfPages = Math.Max(0,value); _currentPage = Math.Min(Math.Max(0, _currentPage), _numberOfPages-1); this.SetNeedsDisplay(); } get{return _numberOfPages;} } #endregion #region Overrides public override void Draw (RectangleF rect) { base.Draw (rect); CGContext context = UIGraphics.GetCurrentContext(); context.SetAllowsAntialiasing(true); RectangleF currentBounds = this.Bounds; float dotsWidth = this.numberOfPages*kDotDiameter + Math.Max(0,this.numberOfPages-1)*kDotSpacer; float x = currentBounds.GetMidX() - dotsWidth/2; float y = currentBounds.GetMidY() - kDotDiameter/2; for (int i = 0; i < _numberOfPages; i++) { RectangleF circleRect = new RectangleF(x,y,kDotDiameter,kDotDiameter); if (i==_currentPage) { context.SetFillColor(this.CurrenColor); } else { context.SetFillColor(this.OtherColor); } context.FillEllipseInRect(circleRect); x += kDotDiameter + kDotSpacer; } } public override void TouchesBegan (MonoTouch.Foundation.NSSet touches, UIEvent evt) { base.TouchesBegan (touches, evt); PointF touchpoint = (touches.AnyObject as MonoTouch.UIKit.UITouch).LocationInView(this); RectangleF currentbounds = this.Bounds; float x = touchpoint.X- currentbounds.GetMidX(); if (x<0 && this.currentPage>=0) { this.currentPage--; Change(this,EventArgs.Empty); } else if (x>0 && this.currentPage<this.numberOfPages-1) { this.currentPage++; Change(this,EventArgs.Empty); } } #endregion #region delegate public event EventHandler Change; #endregion }