¿Cómo funciona UIEdgeInsetsMake?

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

  • Parte superior
  • Izquierda
  • Fondo
  • Derecha

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

De acuerdo con la documentation:

Utiliza este método para agregar inserciones de tapa a una image o para cambiar las inserciones de tapa existentes de una image. En ambos casos, obtienes una nueva image y la image original permanece intacta.

Durante la escala o el cambio de tamaño de la image, las áreas cubiertas por una tapa no se escalan ni cambian de tamaño. En cambio, el área de píxeles no cubierta por la tapa en cada dirección está enlosada, de izquierda a derecha y de arriba a abajo, para cambiar el tamaño de la image. Esta técnica se utiliza a menudo para crear botones de ancho variable, que conservan las mismas esquinas networkingondeadas pero cuya región central crece o se contrae según sea necesario. Para get el mejor performance, use un área de mosaico que tenga un área de 1×1 píxeles.

Por lo tanto, solo necesita utilizar la cantidad de píxeles que desea hacer que no se puedan usar en los valores de la function UIEdgeInsetsMake .

Digamos que tiene una image de 21×50 puntos (21×50 píxeles en definición estándar, 42×100 píxeles en la definición de Retina "@ 2x") y desea que esta image sea horizontalmente extensible, manteniendo los 10 puntos a la izquierda y a la derecha sin tocar al estirar la image , pero solo estirar la banda de 1 punto de ancho en el medio. Entonces usará UIEdgeInsetsMake(0,10,0,10) .

No te molestes en que son flotadores (eso es útil para cambiar el tamaño de subpixel por ejemplo, pero en la práctica probablemente solo uses numbers integers (o flota sin partes decimales)

Tenga cuidado, este es un método único para iOS5 +, no está disponible antes de iOS5. Si usa SDK pre-iOS5, use stretchableImageWithLeftCapWidth:topCapHeight: lugar.


[EDIT] Algunos consejos que uso desde hace algún time, ya que nunca recuerdo en qué order están los campos de la estructura UIEdgeInsets , y en qué order debemos pasar los arguments a la function UIEdgeInsetsMake , prefiero usar la syntax "designada inits" Me gusta esto:

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

O cuando se necesita un reparto 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 los diferentes bordes / direcciones!

Pero son flotadores, así que no sé cómo establecerlo en una image.

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

Nueva característica fresca: tenga en count que si las inserciones de borde son todas de cero, la image será de mosaico. Esto funciona como un background para cualquier cosa que acepte una image de background. Incluso funciona en UIImageView.

Acabo de pasar por este artículo que aclaró todo mi concepto con respecto a UIEdgeInsetsMake

iOS: Cómo hacer un button estirable con UIEdgeInsetsMake