2010-06-03 5 views

Respuesta

7

Parece que lo que estás tratando de hacer es recortar la imagen de la derecha, dejando la parte superior, izquierda e inferior iguales.

Dos cosas para probar:

1) Subclase UIView y en el método drawRect, ajustar el rect y sacan la imagen recortada utilizando CGContextDrawImage (context, rect, sourceImage.CGImage).

2) Use CALayers. Se puede ajustar el 'contentsRect' de la capa de la imageView:

CALayer* imageLayer = imageView.layer; 
imageLayer.masksToBounds = YES; 
CGRect rect; 
if (inPortrait) 
    rect = CGRectMake(0.0, 0.0, 0.5, 1.0); // half size 
else 
    rect = CGRectMake(0.0, 0.0, 1.0, 1.0); // full size 
imageLayer.contentsRect = rect; 

Este rebana la imagen por la mitad a lo ancho. masksToBounds se ocupa de las subcapas de recorte (en caso de que las tenga). Puede ajustar el rectángulo de la unidad contentsRect para ajustar donde desea el corte. También es posible que desee ajustar los propios límites de imageView para que coincida con el tamaño.

Esto tiene una ventaja añadida en que el ajuste de los contenidosRect se anima automáticamente, por lo que cuando haces la rotación, el ancho se anima y desaparece muy bien.

+0

gracias Ramin, im tratando de su código – RAGOpoR

+0

Ramin me dijiste algo de código tutorial o ejemplo? mi código está usando UIView y crear UIImageView en el interior, es tan complicado convertir mi código a su sugerencia gracias por toda la ayuda Ramin – RAGOpoR

+0

Pruebe la opción n. ° 2 anterior. Conecte su UIImageView ivar en la primera línea de fragmento publicado anteriormente. inPortrait es un BOOL, configúrelo en SÍ o NO y vea si hace lo que necesita hacer. Esa es probablemente la forma más fácil de ir. – Ramin

2
// Set the layer contents 
view.layer.contents = [image CGImage]; 
// Stretch so that contents overflows the edges and keeps aspect ratio 
view.layer.contentsGravity = kCAGravityResizeAspectFill; 
// Clip off the overflow 
view.layer.masksToBounds = YES; 
// Set the frame 
CGRect frame; 
frame.origin = CGPointZero; 
frame.size = view.superview.bounds.size; 
view.frame = frame; 
// Make sure it resizes when the superview does 
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
+0

gracias rpetrich, ¿podría decirme más información por favor? no entiendo acerca de esta imagen variable y ver – RAGOpoR

+0

tengo assigen mi UIImageView para ver y hacer una imagen así que tiene algún error como este "_kCAGravityResizeAspectFill", referenciado de: – RAGOpoR

+0

'kCAGravityResizeAspectFill' está en QuartzCore.framework. Necesitarás referenciarlo.Además, mis instrucciones eran para un 'UIView' (aunque no veo por qué no podrían aplicarse también a' UIImageView') – rpetrich

12

utilizar un UIImageView con estos valores:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
           UIViewAutoresizingFlexibleHeight); 

imageView.contentMode = UIViewContentModeScaleAspectFit; 
Cuestiones relacionadas