ios uikit uibezierpath

ios - ¿Por qué el parámetro cornerRadii del tipo CGSize en-[UIBezierPath bezierPathWithRoundedRect: byRoundingCorners: cornerRadii:]?



uikit (3)

Ahora puedo confirmar que se trata de un error introducido después de iOS 6. Tengo un viejo 4s con iOS 6.1. En esa máquina, este código:

path = [UIBezierPath bezierPathWithRoundedRect: bounds byRoundingCorners: UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii: CGSizeMake(bounds.size.width/2, bounds.size.width/6) ];

Crea un rectángulo redondeado con las esquinas de forma ovalada. La curva es mucho más gradual en la parte superior de la curva, y mucho más afilada en los lados, como cabría esperar:

Esta es la imagen de iOS 6.1, con las esquinas como deberían ser:

Y aquí es cómo se ve el mismo código cuando se ejecuta desde iOS 8.1.2:

Parece que en iOS> = 7.0, ignora la altura del radio especificado y usa el valor de ancho tanto para la altura como para el ancho de los óvalos de esquina, lo que los obliga a ser siempre cuartos círculos.

He registrado un error en el sistema de reportero de errores de Apple. Ya veremos lo que dicen. Sugiero que todos los que están viendo este problema reporten también un error. Cuantos más informes reciban, es más probable que lo solucionen.

No puedo entender esto ... estoy jugando con

-[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:] como tal:

bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 10, 80, 80) byRoundingCorners:(UIRectCornerBottomLeft) cornerRadii:CGSizeMake(20, 20)];

Y funciona como se esperaba. Pero si sustituyo cornerRadii: CGSizeMake (20, 20) con, digamos, cornerRadii:CGSizeMake(20, 5) o CGSizeMake(20, 40) , no hay diferencia.

¿Por qué es cornerRadii CGSize y no CGFloat entonces? ¿ CGSize.height qué sirve CGSize.height ?

Cualquier idea y consejo será muy apreciado :)


Bueno, después de más pruebas finalmente encontré que parece ser un error de iOS 7. El mismo código en el simulador de iOS 6 se dibuja correctamente, como se esperaba. sin embargo, tanto el simulador de iOS 7 como el dispositivo iOS 7 tienen este problema y se dibujan incorrectamente.

Presentaré un informe de error, a menos que alguien demuestre que estoy equivocado y hay algo que me falta.


El parámetro CGSize es permitir que los radios de las esquinas en los planos horizontal y vertical sean diferentes. Es decir, unas esquinas no simétricas.

Intente girar en diferentes esquinas y usar diferentes valores para ver qué sucede.