ios cocoa-touch ios5 uiimage uiedgeinsets

ios - ¿Cómo funciona UIEdgeInsetsMake?



cocoa-touch ios5 (3)

Estoy haciendo una aplicación donde uso UIEdgeInsetsMake para UIEdgeInsetsMake , pero no entiendo cómo funciona exactamente, UIEdgeInsetsMake tiene 4 argumentos:

  • Parte superior
  • Izquierda
  • Fondo
  • Derecha

Pero son flotadores, así que no sé cómo configurar eso en una imagen, ¡gracias! :RE


Pero son flotadores, así que no sé cómo configurar eso en una imagen

Este es un método de instancia UIImage. Entonces, la forma en que usa resizableImageWithCapInsets para crear en una imagen es comenzar enviando ese mensaje a una imagen (un UIImage).

Nueva función interesante: tenga en cuenta que si las opciones de los bordes son todas cero, la imagen se embaldosará. Esto funciona como un fondo para cualquier cosa que acepte una imagen de fondo. Incluso funciona en UIImageView.



De acuerdo con la documentación:

Utiliza este método para agregar límites a una imagen o para cambiar los recuadros de una imagen. En ambos casos, obtiene una imagen nueva y la imagen original permanece intacta.

Durante la ampliación o el cambio de tamaño de la imagen, las áreas cubiertas por un límite no se escalan ni cambian de tamaño. En cambio, el área de píxeles no cubierta por el límite en cada dirección está en mosaico, de izquierda a derecha y de arriba a abajo, para cambiar el tamaño de la imagen. Esta técnica se usa a menudo para crear botones de ancho variable, que conservan las mismas esquinas redondeadas pero cuya región central crece o se reduce según sea necesario. Para un mejor rendimiento, use un área de mosaico que tenga un área de 1x1 píxel de tamaño.

Por lo tanto, solo necesita usar la cantidad de píxeles que desea que sean imposibles de estirar en los valores de la función UIEdgeInsetsMake .

Supongamos que tiene una imagen de 21x50 puntos (21x50 píxeles en definición estándar, 42x100 píxeles en definición Retina "@ 2x") y desea que esta imagen sea estirable horizontalmente, manteniendo intactos los 10 puntos a la izquierda y a la derecha al estirar la imagen , pero solo estira la banda de 1 punto de ancho en el medio. Luego usará UIEdgeInsetsMake(0,10,0,10) .

No se moleste en que sean flotadores (esto es útil para el cambio de tamaño de subpixelling, por ejemplo, pero en la práctica probablemente solo use enteros (o flotantes sin partes decimales)

Tenga cuidado, este es un método iOS5 +, no disponible antes de iOS5. Si usa SDK anterior a iOS5, use stretchableImageWithLeftCapWidth:topCapHeight: lugar.

[EDITAR] Algunos consejos que uso desde hace algún tiempo, ya que nunca recuerdo en qué orden los campos de la estructura UIEdgeInsets son - y en qué orden se supone que debemos pasar los argumentos a la función UIEdgeInsetsMake - prefiero usar la sintaxis "inits designados" Me gusta esto:

UIEdgeInsets insets = { .left = 50, .right = 50, .top = 10, .bottom = 10 };

O cuando se necesita un lanzamiento explícito:

UIImage* rzImg = [image resizableImageWithCapInsets:(UIEdgeInsets){ .left = 50, .right = 50, .top = 10, .bottom = 10 }];

¡Lo encuentro más legible, especialmente para estar seguro de que no mezclamos las diferentes fronteras / direcciones!