ios - apple - Cómo hacer que UIImageView cambie automáticamente el tamaño de la imagen cargada
objective c uiimage (2)
He puesto un control UIImageView en mi vista con IB. El tamaño del control es solo algo que decidí, tamaño bastante aleatorio. Lo que quiero hacer es cambiar el tamaño automáticamente cada vez que configuro la propiedad de la imagen a una nueva imagen. Quiero que realmente cambie el tamaño al tamaño de la imagen. ¿Se puede hacer automáticamente? ¿Sin ninguna intervención de código? Si no, ¿cuál será el mejor enfoque en este caso?
Lo que pasa hoy es extraño. Cargo imágenes en ImageView y veo que las imágenes se visualizan correctamente aunque el tamaño de ImageView no haya cambiado. Esto interfiere con mi intención de agarrar los toques de los usuarios sobre ImageView. El usuario toca la imagen real, pero dado que algunas partes de la imagen están fuera (y esta es la parte extraña) de ImageView, el mapeo de puntos se vuelve loco. ¿Puede alguien pensar en alguna explicación para esto?
Gracias
Aquí está el fragmento de código que corté y pegué a menudo, usando el mismo método que Hampus Nilsson anterior:
Ejemplo
func demo(x0:CGFloat, y0:CGFloat) {
let imgView = UIImageView(image: UIImage(named: "someImg.png"));
imgView.sizeToImage();
imgView.center = CGPoint(x:x0, y:y0);
}
Extensión UIImageView
extension UIImageView {
/******************************************************************************/
/** @fcn sizeToImage()
* @brief size view to image
* @@assum (image!=nil)
*/
/******************************************************************************/
func sizeToImage() {
//Grab loc
let xC = self.center.x;
let yC = self.center.y;
//Size to fit
self.frame = CGRect (x: 0, y: 0, width: (self.image?.size.width)!/2, height: (self.image?.size.height)!/2);
//Move to loc
self.center = CGPoint(x:xC, y:yC);
return;
}
Un maravilloso cortar y pegar, utilizar si es necesario!
El tamaño de una imagen no influye en el tamaño real de UIImageView, sino que el tamaño de UIImageView depende únicamente del tamaño que se le asigne en Interface Builder (o de lo que le asignó). De lo contrario, las imágenes serían extravagantes cuando utilice las imágenes @ 2x para pantallas Retina, por ejemplo.
Si desea solucionar este problema, también debe cambiar el marco al configurar la imagen. Si estás haciendo esto ahora:
[imageView setImage:[UIImage imageNamed:@"myImage.jpg"]];
cambiarlo a
UIImage img = [UIImage imageNamed:@"myImage.jpg"];
[imageView setImage:img];
imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y,
img.size.width, img.size.height);
Sin embargo, esto no cambiará el diseño de la vista que contiene, puede hacer que cambie los tamaños de las otras vistas automáticamente en iOS 6 usando Restricciones de diseño. Si usted es un desarrollador de Apple, puede ver los videos de instrucciones de la WWDC, que explican cómo funciona ese sistema bastante bien.
Si está de acuerdo con que la vista no crece, y el problema radica en cómo la imagen se desborda cuando se cambia a una que no coincide con la dimensión de la vista que contiene, puede activar la casilla de verificación "Subvistas de recorte" en la Interfaz Constructor para la vista de la imagen. Esto hará que la vista no dibuje nada fuera de su propio cuadro delimitador, si también configura el modo de escala en "Relleno de aspecto" o "Escala para rellenar", la imagen siempre llenará todos los límites de la vista que contiene .