Pregunta

Quiero poner en práctica las fronteras de diálogo que escala con el tamaño que requiero el cuadro de diálogo que sea. Tal vez hay un nombre mejor más convencional para este tipo de cosas. Si la hay, si alguien editar el título, eso sería genial.

En cualquier caso, me gustaría hacer esto para que pueda tener diálogos de cualquier tamaño sin los artefactos visuales que vienen con escalamiento borde decorativo a pequeños, grandes o extravagantes Dimensiones desproporcionado sobre. Tengo algunas ideas sobre cómo se hace esto, pero no estoy seguro de que es mejor para iPhone. Tengo un par de preguntas.

1) ¿Debo hacer una vista de objetos que contiene, que básicamente sobrecarga su método drawRect y extrae las imágenes donde deben estar en su escala apropiada cuando se llama al método, o debería principal una que contiene objeto de vista que simplemente contiene 8 UIImageViews? Sospecho que el último enfoque no funcionará si necesidad de ampliar activamente la clase de diálogo que aparece, como en una animación.

1b) Si la sobrecarga drawRect es el camino a seguir, alguien tiene algunos ejemplos de código o un enlace a un ejemplo que demuestra el dibujo una imagen directamente desde drawRect ()?

2) ¿Es generalmente mejor para crear

a) de una imagen de 3 x 3, donde los segmentos están en su cuadrícula de 1x1 apropiada de la imagen? Si es así, es que sea fácil de extraer de una porción de esta imagen en mi punto de vista objetivo en drawRect (si la primera suposición es correcta que debo utilizar drawRect)?

b) Las piezas por separado en 8 diferentes archivos?

ACTUALIZACIÓN: Para aclarar, la idea es tomar cualquier arte de borde personalizado y ser capaz de estirar la segunda, cuarta, sexta, octava y celular (en una cuadrícula de 3x3 celdas) para formar un borde de cualquier tamaño con sólo esos activos. El estiramiento apenas una imagen normal daría lugar a una distorsión de las esquinas, así que me gustaría estirar las células pares como sea necesario y la pegajosidad en las esquinas para que no haya distorsión. Yo había visto este hecho antes, así que pensé que podría ser una cosa normal y tienen una nomenclatura estándar que se aparte de lo que lo he llamado.

De todos modos, se aconseja que la adición de 8 UIImageViews a un contenedor no sería tan eficiente como dibujar las UIImages sobre la marcha en drawRect así que tomamos este enfoque utilizando CGContextDrawImage () después de aplicar las transformaciones necesarias para el contexto de traducir y la escala de la Y. Debido a que esta función dibuja desde la esquina inferior izquierda de una imagen, pero sobre una UIView origined parte superior izquierda, la imagen es al revés sin el eje Y invertido. Me di cuenta de la sugerencia de utilizar funciones como UIImage drawAtPoint funciona tan bien y de manera similar, pero para el invertido desde UIImage dibuja en la misma orientación que UIViews. Voy a seguir mi aplicación con el primero y ver cómo va, pero una pregunta más.

¿Alguien por casualidad sabe cuál de estos enfoques es más efficeint, más rápido, etc?

¿Fue útil?

Solución

No estoy seguro de entender, pero aquí es mi mejor oportunidad de una respuesta ...

El uso de drawRect: o añadir UIImageViews individuales a una vista padre es totalmente de usted. UIImageView le da un poco de funcionalidad encapsulada de forma gratuita, pero por lo demás son iguales en cuanto a las apariencias van.

Si usted quiere ir a la ruta drawRect, sólo tiene que utilizar de UIImage drawAtPoint: método. Hacer los cálculos para donde quiera que sea, y dibujarlo. Usted puede calcular sus puntos basada en las dimensiones de la vista padre.

En cuanto a la escala, es imposible cambiar el tamaño de estas imágenes sin escalado ellos, así que me gustaría planear y hacer sus originales tan grande o más grande de lo que nunca esperas para mostrarlos.

Espero que ayude un poco?

Saludos

Otros consejos

Si desea una frontera en un cuadro de diálogo, asumiendo que la caja es una UIView (o subclase), a continuación, establecer propiedades de los bordes de la capa y dejar que el sistema de dibujar la frontera para usted.

#import <QuartzCore/QuartzCore.h> 
// ... 

view.layer.borderWidth = 2;
view.layer.borderColor = [UIColor whiteColor].CGColor; 
view.layer.cornerRadius = 0;  // 0=square corners, >0 for rounded
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top