需要有关UIImageView的contentMode和autoresizingMask的帮助

时间:2010-06-03 03:54:17

标签: iphone uiimageview

我的照片就像这张图片一样,会出现在风景模式

alt text

所以如果将设备旋转到纵向,如何呈现这样的图像

alt text

4 个答案:

答案 0 :(得分:12)

使用具有以下设置的UIImageView:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                              UIViewAutoresizingFlexibleHeight);

imageView.contentMode = UIViewContentModeScaleAspectFit;

答案 1 :(得分:7)

看起来你要做的就是将图像剪裁在右边,同时让顶部,左边和底部保持不变。

要尝试两件事:

1)子类UIView并在drawRect方法中,调整矩形并使用CGContextDrawImage (context, rect, sourceImage.CGImage)绘制剪切的图像。

2)使用CALayers。您可以调整imageView图层的“contentsRect”:

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;

将图像沿宽度切成两半。 masksToBounds负责剪切子图层(如果你有它们)。您可以调整contentsRect单位矩形以调整您希望截止的位置。您可能还想调整imageView自己的边界以匹配大小。

这有一个额外的好处,因为调整contentsRect是自动动画的,因此当您进行旋转时,宽度可以很好地进行动画制作。

答案 2 :(得分:3)

// 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;

答案 3 :(得分:0)

您必须使用视图的图层。

您可以在https://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/Layers.html

找到相应的指南

希望这有帮助。

谢谢,
吉姆。