tag bar attribute ios uibezierpath

ios - bar - ¿Cómo funciona usesEvenOddFillRule?



navigation bar ios (2)

¿Alguien puede explicar cómo funciona la propiedad usesEvenOddFillRule de UIBezierPath y dónde se puede usar?

Sé que puedo recibir votaciones, pero realmente no obtuve la explicación en los documentos de Apple.


La regla de relleno impar es una forma de determinar qué regiones de una ruta están "dentro" de la ruta frente a "fuera" de la ruta, lo que es importante saber cuando se llena el interior de la ruta. Por lo general, solo difieren cuando un camino corta agujeros en sí mismo. La regla de lo impar por lo general no sombreará esas regiones, mientras que la otra opción usualmente lo hará.

La regla impar es simplemente esto:

A medida que avanza en línea recta a través del lienzo que contiene la ruta, cuente el número de veces que cruza la ruta. Si ha cruzado un número impar de veces, está "dentro" del camino. Si has cruzado un número par de veces, estás fuera del camino.

Por lo tanto, si su ruta consiste en dos círculos concéntricos en forma de ojo de buey, la regla de la misma manera consideraría que el área entre los dos círculos está "adentro" y el área en el centro como "afuera".

Otra opción se llama la regla de devanado no cero. (Esto se usa si usesEvenOddFillRule es NO ). El no cero nuevamente considera una línea recta a través del camino, pero cuenta las intersecciones de manera un poco diferente. Tiene en cuenta la dirección en la que se dibujó la trayectoria. (Es decir, un círculo en el sentido contrario a las agujas del reloj no es lo mismo que un círculo en el sentido de las agujas del reloj). Así es:

A medida que avanzas en línea recta a través del lienzo que contiene el camino, mantén un contador, comenzando en 0. Cada vez que cruces una parte del camino donde el camino avanza de izquierda a derecha (como se observa desde la línea que cruza el camino ), agregue uno al contador. Cada vez que cruce una línea en la que el camino progresa de derecha a izquierda, reste una del contador. Si el contador no es cero, estás dentro del camino. De lo contrario, estás fuera.

Por lo tanto, en el mismo ejemplo de círculos concéntricos, si ambos círculos se dibujaron en la misma dirección, entonces toda la región, tanto dentro como fuera del círculo central, se consideraría "dentro" del camino. Si los círculos se dibujaran en direcciones opuestas, la región central se consideraría "fuera" del camino, como en la regla de lo impar.


Una buena explicación de las reglas de relleno en gráficos de computadora se da aquí. (Esto está en una referencia de .NET, pero los mismos principios se aplican exactamente a Quartz).

http://msdn.microsoft.com/en-us/library/system.windows.media.fillrule.aspx

En resumen, la regla de relleno par impar significa que todos los bordes se mostrarán en los gráficos de salida (lo que puede dar como resultado que una sola ruta rellena tenga "agujeros"), mientras que la regla de relleno que no es cero, en la mayoría de los casos, terminará lo que significa que una forma dibujada es en su mayoría sólida incluso si contiene auto-intersecciones.

Un ejemplo simple se puede ver a continuación. La imagen de la izquierda utiliza reglas de relleno pares e impares y la de la derecha utiliza reglas de relleno distintas de cero.