ver ser seguro puede perdido modo este desactivar delicado contenido como buscar ios5 uiview contentmode uiview-hierarchy

ios5 - seguro - el contenido de este tumblr puede ser delicado desactivar



¿A qué tipo de contenido se refiere el modo UIViewContentMode? (2)

Primero lee sobre los modos de contenido aquí

En su ejemplo, cambia el marco de la vista roja. Esto invocará layoutSubviews en la vista que reubicará la vista verde de acuerdo con las restricciones de diseño o las máscaras de realizing. No has especificado ninguno. Por lo tanto, el marco de la vista verde se mantendrá igual.

El modo de contenido especifica cómo se debe actualizar la capa de la vista al redimensionar. Dependiendo del modo de contenido se llamará drawRect o no.

Puede probar el efecto de los diferentes modos de contenido con el siguiente ejemplo:

Agregue una subclase UIView, que dibuja un círculo usando esta implementación drawRect:

- (void)drawRect:(CGRect)rect { // Drawing code NSLog(@"drawRect %@", NSStringFromCGRect(rect)); CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextAddEllipseInRect(ctx, self.bounds); [[UIColor redColor] setFill]; CGContextFillPath(ctx); }

En el controlador de vista, crea y agrega la vista de círculo:

CircleView* circleView = [[CircleView alloc] initWithFrame:CGRectMake(10, 10, 20, 20)]; circleView.contentMode = UIViewContentModeCenter; // <- try different modes here [self.view addSubview:circleView];

Ahora vamos a animar el cuadro y ver qué sucede:

dispatch_async(dispatch_get_main_queue(), ^{ [UIView animateWithDuration:5 animations:^{ circleView.frame = CGRectMake(10, 10, 100, 200); }]; });

Lo hago asincrónicamente para forzar a CoreGraphics a dibujar la vista al menos una vez con el fotograma original. Cuando no configura el modo de contenido, termina con un círculo borroso, ya que simplemente aumenta sin redibujar. UIViewContentModeCenter hace que el círculo pequeño permanezca en el centro; tampoco es necesario volver a dibujar. UIViewContentModeRedraw hace que la vista dibuje la vista nuevamente con el nuevo marco. En realidad, eso sucede antes de que comience la animación.

Tenga en cuenta que el modo de contenido puede afectar el rendimiento del dibujo.

Según el documento oficial en UIView sobre la propiedad contentMode:

The content mode specifies how the cached bitmap of the view’s layer is adjusted when the view’s bounds change

¿Qué se define el contenido en esta definición? ¿Es una vista secundaria o cuando definimos un color de fondo para una vista, por ejemplo?

Mi primera suposición fue que debería aplicarse al menos para las subvistas en una vista, pero por ejemplo el siguiente fragmento de código no me dará el resultado esperado al jugar con la etiqueta UIViewContentModeCenter :

UIView* redView = [[UIView alloc] initWithFrame:CGRectMake(80, 80, 150, 200)]; redView.contentMode = UIViewContentModeCenter; redView.backgroundColor = [UIColor redColor]; UIView* greenView = [[UIView alloc] initWithFrame:redView.bounds]; greenView.backgroundColor = [UIColor greenColor]; [redView addSubview:greenView]; redView.frame = CGRectInset(redView.frame, -5, -5); [self.view addSubview:redView];

Acabo de configurar un redView que incluirá una vista verde. También configuré el modo de contenido del redview para UIViewContentModeCenter . ¿Por qué en el código que escribí el greenView no está centrado cuando cambio el marco de su principal? no es lo que se supone que UIViewContentModeCenter debe hacer?

¡Gracias por aclararlo!

Ps: Puede probar fácilmente el código anterior en la loadView de loadView de un proyecto de plantilla de controlador de vista simple.


De la documentación:

El modo de contenido especifica cómo se ajusta el mapa de bits en caché de la capa de la vista cuando cambian los límites de la vista.

Para una vista de imagen, esto está hablando de la imagen. Para una vista que dibuje su contenido, esto está hablando del contenido dibujado. No afecta el diseño de las subvistas.

Debe mirar las máscaras de aumento de tamaño en su lugar en las subvistas. El modo de contenido es una arenga aquí. Si no puede lograr el diseño, necesita usar máscaras de aumento automático, entonces debe implementar layoutSubviews y calcular manualmente las posiciones y marcos de la subvista.

de la respuesta de jrturton a: https://.com/a/14111480/1374512