Empecé a estudiar objective-c, usando el de iPhone e iPad para Principiantes por Rory Lewis libro, pero me quedé atrapado en el 5to capítulo.

Quiero hacer un botón que reduce el tamaño de una imagen.
Mi problema es que después de escribir todo el código, la imagen se reduce al punto (0, 0) de la UIImageView (arriba a la izquierda), mientras que en el video la imagen se reduce a su centro. He hecho algunas investigaciones y encontró que CGAffineTransform utiliza el centro del objeto para hacer las traducciones, rotaciones, etc.

Así que ¿por qué no funciona en mi caso?

Tengo la última versión de Xcode y no he hecho nada extraño.
Espero haber sido claro. Lo siento por mi inglés.

EDITAR
Lo siento por el código, pero escribí la pregunta de mi teléfono.
De todos modos el incriminado parte va algo como esto

- (IBAction)shrink:(id)sender {

if(hasShrink == NO){
    [shrinkButton setTitle:@"Grow" forState:UIControlStateNormal];
}
else if(hasShrink == YES){
    [shrinkButton setTitle:@"Shrink" forState:UIControlStateNormal];
}
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:1.0];
        myIcon.transform = CGAffineTransformMakeScale(.25, .25);
        hasShrink = YES;
        [UIView commitAnimations];

}

Todas las animaciones están escritos correctamente y la aplicación hace el trabajo, no sólo se reduce a la parte superior izquierda. ¿Por qué es el punto que no se fija en el centro de la UIImageView por defecto como debe ser?

EDICIÓN:
Me di cuenta de que era un problema causado por el Autodiseño.
Una vez desactivado todo fue tan fácil 😉

Podría publicar el código que estás usando?
editado con el código 😉

OriginalEl autor halfblood17 | 2012-12-04

3 Comentarios

  1. 9

    Si usted está transformando una vista alterados gestionados por la disposición automática, puede experimentar algunos de los extraños efectos secundarios. Ver esta respuesta para obtener más detalles.

    La solución que se me terminó empleando fue para encapsular el punto de vista que quería transformar dentro de otra vista de exactamente el mismo tamaño. La vista exterior se había apropiado restricciones de diseño aplicado, mientras que el interior fue simplemente centrada en su contenedor. La aplicación de un CGAffineTransform escala de transformación al interior de la vista de los centros correctamente.

    Gracias, que me ha ayudado mucho !

    OriginalEl autor devios1

  2. 8

    Vieja pregunta… pero en caso de que otros vienen buscando:

    La CGAffineTransform actos (rota, escalas) alrededor de una anchorPoint.

    Si son de tamaño 0, 0, a continuación, su punto de anclaje se establece en 0, 0. Si desea que el tamaño de un punto diferente, tales como el centro de la imagen, es necesario cambiar el punto de anclaje.

    El ancla es parte de una capa

    Así que si usted tiene un UIImageView llamado imageview, se podría hacer una llamada como esta para colocar el anclaje al centro de imageview:

    [imageview.layer setAnchorPoint:CGPointMake(0.5, 0.5)];
    anchorPoint se mide en valores relativos y los valores predeterminados para 0.5, 0.5, que es el centro de la vista. Utilizando los valores de los píxeles no le dará los resultados esperados.
    Gracias… buen punto!

    OriginalEl autor HalR

  3. 7

    Intentar algo como esto:

    CGAffineTransform t = CGAffineTransformMakeScale(0.5, 0.5);
    CGPoint center = imageView.center; //or any point you want
    [UIView animateWithDuration:0.5
                     animations:^{
                        imageView.transform = t;
                        imageView.center = center;
                     }
                     completion:^(BOOL finished) {
                        /* do something next */
                     }];

    Próxima vez mostrar su código. Será más fácil ayudarte.

    Verificación de este proyecto: https://github.com/djromero/StackOverflow/archive/Q-13706255.zip

    Debe estudiar cómo autodiseño y autoresize afectar sus puntos de vista. En el proyecto por encima de ambos son discapacitados para que veas cómo funciona.

    Yo lo he hecho como has dicho, pero si me imprime el valor de myImage.center.x y myImage.center.y sigue apuntando a la esquina superior izquierda. He intentado 3 veces para reiniciar el proyecto y todavía tienen el mismo problema, incluso de escribir sólo el código para reducir el botón. - (IBAction)shrink:(id)sender { if(hasMoved == NO && hasShrink == NO){ [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:1.0]; _myIcon.transform = sizeShrink; hasShrink = YES; [UIView commitAnimations];
    Si usted está usando ese código no estás haciendo lo que me dijo. Por favor, actualice a la pregunta con su fuente, no añadir comentarios (difícil de leer, no es el lugar adecuado).
    ok, voy a arreglar esto. Pero aún así traté de usar el código sólo y nada cambia.. es todavía cambia de tamaño mientras se mueve.
    ¿Estás seguro que tu imageView se está moviendo? Tal vez tiene un extraño contenido de montaje. Eche un vistazo a UIView‘s -contentMode y -contentStretch propiedades.

    OriginalEl autor djromero

Dejar respuesta

Please enter your comment!
Please enter your name here