2009-06-14 39 views
12

He leído varios puestos aquí haciendo preguntas similares ... He intentado varias formas que se publicaron incluyendo los límites y marcos etc. incluyendo los siguientes:UIImageView cambiar el ancho y la altura

myImage.frame = CGRectMake(0.0f, 0.0f,50.0f, 50.0f); 

y:

myImage.bounds = CGRectMake(0.0f, 0.0f,50.0f, 120.0f); 

ninguno de esos funcionan.

Sin embargo, me parece interesante que el siguiente código me permite mover la imagen alrededor, pero no cambia el ancho:

CGRect frameRect = myImage.frame; 
frameRect.size.width = 50.0f; 
frameRect.origin.x += 10.5f; 
myImage.frame = frameRect; 

Entonces, ¿por qué ninguno de ellos cambiar la anchura/altura de mi ImageView?

Encontré otra publicación aquí que básicamente dice que tengo que enderezar un pequeño libro de código para que cambie el tamaño de mi imagen ... ¿es así?

como este: UIImage: Resize, then Crop

sin duda esto es más simple que eso ??

+0

Me di cuenta, mi pregunta no se hizo de la mejor manera, debería haber indicado que estaba bien para escalar la imagen. Pude simplemente seleccionar el modo para "escalar para llenar" y el código que tengo arriba funciona bien entonces. Gracias por la ayuda. –

Respuesta

-1

No tiene que escribir todo un libro, puede copiar ese código.

Creo que el UIImageView siempre dibuja la imagen en 0,0 en una escala de 1.0. Tendrá que cambiar el tamaño de la imagen si desea continuar usando UIImageView.

0

Use myImageView.frame = myNewPosAndSize; para cambiar el tamaño o cambiar la posición de la vista de su imagen (como en cualquier otra vista). Puede confundirte porque la vista de la imagen dibuja su imagen con su tamaño original, posiblemente excediendo sus propias dimensiones. Para desactivar esto, use myImageView.clipsToBounds = NO;

11

En primer lugar, no puede establecer el marco o los límites del UIImage - eso solo funcionará en un UIImageView.

He encontrado que cambiar el marco de un UIImageView hace que la imagen sea escalada al nuevo tamaño. A veces, eso es indeseable, y en su lugar, desea recortar la imagen.

no puedo decir si esto es lo que está pidiendo, pero aquí hay un código para recortar una imagen a un tamaño específico en un UIImageView:

UIImage *myImage = [UIImage imageNamed:@"photo.png"]; 

CGRect cropRect = CGRectMake(0.0, 0.0, 320.0, 44.0)); 
CGImageRef croppedImage = CGImageCreateWithImageInRect([myImage CGImage], cropRect); 

UIImageView *myImageView = [[UIImageView alloc] initWithFrame:cropRect]; 
[myImageView setImage:[UIImage imageWithCGImage:croppedImage]]; 

CGImageRelease(croppedImage); 
3

De lo que me sale de la cuestión, el OP quería cambiar el tamaño del UIImageView cuando se cambia el tamaño del contenedor UIView. El código siguiente lo hará ...

UIView * foo = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)] autorelease]; 
foo.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
UIImageView * bar = [[UIImageView alloc] initWithImage: 
        [UIImage imageNamed:@"test.png"]]; 
bar.autoresizingMask = foo.autoresizingMask; 
[foo addSubview:bar]; 
[self.view addSubview:foo]; 

La clave aquí son los foo.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight y bar.autoresizingMask = foo.autoresizingMask; líneas. Olvídate de cualquiera de estos, y todo el jigmarole dejará de funcionar.

+5

lo odio cuando alguien usa foo y barra –

1

Pruebe a usar UIScrollView.Añadir el UIImageView a la UIScrollView en Interface Builder a continuación, puede controlar la posición y el tamaño de la imagen de la siguiente manera:

CGRect rect = [scrollView frame]; 

    rect.origin.x = 50.0f; 
    rect.origin.y = 0.0f; 
    rect.size.width = 320.0f; 
    rect.size.height = 150.0f; 

    [scrollView setFrame:rect]; 
24

A continuación se va a cambiar el tamaño de la UIImaveView, la saturación de la imagen subyacente sin cambiar el tamaño y mantenerlo alineado con la parte inferior izquierda de vista:

imageView.frame = CGRectMake(
      imageView.frame.origin.x, 
      imageView.frame.origin.y, newWidth, newHeight); 

imageView.contentMode = UIViewContentModeBottomLeft; // This determines position of image 
imageView.clipsToBounds = YES; 
+11

Esto no funciona – Guy

2

Bueno, si su leer la documentación sobre UIImage se puede observar que es imposible cambiar cualquier parámetro de un UIImage después de crearla, la solución que hemos implementado para el uso de alta calidad las imágenes para cambiar algún parámetro de (por ejemplo) SliderControl como Screw Image, es la siguiente:

UIImage *tumbImage= [UIImage imageNamed:@"screw.png"]; 
UIImage *screw = [UIImage imageWithData:UIImagePNGRepresentation(tumbImage) scale:2]; 

Con eso, puedo usar una imagen de 100x100 px en mis aplicaciones escalado al 50%.

Saludos cordiales.

1

Si probó que esos métodos no pueden funcionar, la única forma de hacerlo es agregar la restricción de ancho y alto al UIImageView.

// Create the constraint in code 
NSLayoutConstraint *constraint0 = [NSLayoutConstraint constraintWithItem: myImage attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:1.0f constant: yourNewsWidth]; 


NSLayoutConstraint *constraint1 = [NSLayoutConstraint constraintWithItem: myImage attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0f constant: yourNewsHeight]; 

[myImage addConstraint:constraint0]; 
[myImage addConstraint:constraint1]; 
Cuestiones relacionadas