MonoTouch: método de conveniencia de UIImage networkingondeado

¿Hay un método incorporado MonoTouch para networkingondear los bordes de un UIImage ?

Parece recordar haberlo visto una vez.

Al networkingondear un UIImage produciría otro UIImage.

Puede hacer esto si crea un CGContext para renderizar con el mismo tamaño que la image original, luego agregue una ruta de recorte con las esquinas networkingondeadas y renderice su UIImage original.

Entonces puedes sacar el UIImage del CGContext.

Otra opción es evitar el paso intermedio, es empujar el estado de los charts en el dibujo de context, agregar la ruta networkingondeada como una ruta de recorte, dibujar la image y luego hacer estallar el estado de los charts para volver a esto.

Puedes ver cómo TweetStation usa esto para sus botones de cristal:

https://github.com/migueldeicaza/MonoTouch.Dialog/blob/master/MonoTouch.Dialog/Utilities/GlassButton.cs#L76

Aquí hay un buen ayudante de código para los usuarios de MonoTouch que buscan una function de ayuda rápida. El código Tweeked provino del sitio Excelente Xamarin.com :

 public static UIImage RounderCorners (UIImage image, float width, float radius) { UIGraphics.BeginImageContext (new SizeF (width, width)); var c = UIGraphics.GetCurrentContext (); //Note: You need to write the Device.IsRetina code yourself radius = Device.IsRetina ? radius * 2 : radius; c.BeginPath (); c.MoveTo (width, width / 2); c.AddArcToPoint (width, width, width / 2, width, radius); c.AddArcToPoint (0, width, 0, width / 2, radius); c.AddArcToPoint (0, 0, width / 2, 0, radius); c.AddArcToPoint (width, 0, width, width / 2, radius); c.ClosePath (); c.Clip (); image.Draw (new PointF (0, 0)); var converted = UIGraphics.GetImageFromCurrentImageContext (); UIGraphics.EndImageContext (); return converted; } 

En MonoTouch (y el propio iOS) no es algo que puedas hacer en UIImage sí. Sin embargo, puede hacer esto en UIImageView manipulando su propiedad Layer .

Vea esta respuesta para un ejemplo de Objective-C que sería fácil de convertir a C #.

También te sugiero el siguiente tutorial sobre introducción-a-calayers-tutorial . Cubre cosas interesantes sobre la personalización de capas en iOS.

Espero eso ayude.

Basado en la respuesta de BahaiResearch.com , he creado otro método para imágenes no cuadradas y un porcentaje de networkingondez en lugar de un radio literal.

No estoy seguro si producirá puntos suspensivos correctamente. Así que apreciaré si alguien puede probar o incluso mejorar este método.

 private static UIImage RoundCorners (UIImage image, float roundnessPercentage) { float width = image.Size.Width; float height = image.Size.Height; float radius = ((width+height)/2) * (roundnessPercentage/(100*2)); UIGraphics.BeginImageContext (new SizeF (width, height)); CGContext c = UIGraphics.GetCurrentContext(); c.BeginPath (); c.MoveTo(width, height/2); //Bottom-right Corner c.AddArcToPoint(width, height, height / 2, width, radius); //Bottom-left Corner c.AddArcToPoint(0, height, 0, 0, radius); //Top-left Corner c.AddArcToPoint(0, 0, width/2, 0, radius); //Top-right Corner c.AddArcToPoint(width, 0, width, height/2, radius); c.ClosePath(); c.Clip(); image.Draw (new PointF (0, 0)); UIImage converted = UIGraphics.GetImageFromCurrentImageContext(); UIGraphics.EndImageContext (); return converted; }