【发布时间】:2013-08-25 23:47:45
【问题描述】:
我的 Nib 文件中有一个 UIImageView,它可以拉伸屏幕的宽度。我想做的是在完成自动调整大小(使用设备旋转)时让图像的中间三分之一保持相同的高度和宽度,并且只拉伸图像的三分之一和三分之三。
任何想法如何做到这一点?
【问题讨论】:
我的 Nib 文件中有一个 UIImageView,它可以拉伸屏幕的宽度。我想做的是在完成自动调整大小(使用设备旋转)时让图像的中间三分之一保持相同的高度和宽度,并且只拉伸图像的三分之一和三分之三。
任何想法如何做到这一点?
【问题讨论】:
据我所知,没有直接的方法可以做到这一点。这是一种方法:
创建 3 个宽度和高度相等(原始图像的 1/3)的 UIImageView,而不是一个 ImageView。上下 ImageView 将分别粘在顶部和底部边缘,中间的 ImageView 将具有灵活的底部和顶部边距。您需要将中间 ImageView 的 contentMode 属性设置为UIViewContentModeScaleAspectFit(或UIViewContentModeCenter,取决于您要如何处理旋转),其他设置为UIViewContentModeScaleToFill。您可以从 IB 设置所有这些属性。
现在您需要从代码中设置每个图像的来源。在viewDidLoad 方法中,使用post 中的解决方案或使用以下代码sn-p 将UIImage 分成3 部分:
-(NSMutableArray *)getImagesFromImage:(UIImage *)image withRow:(NSInteger)rows withColumn:(NSInteger)columns
{
NSMutableArray *images = [NSMutableArray array];
CGSize imageSize = image.size;
CGFloat xPos = 0.0, yPos = 0.0;
CGFloat width = imageSize.width/rows;
CGFloat height = imageSize.height/columns;
for (int y = 0; y < columns; y++) {
xPos = 0.0;
for (int x = 0; x < rows; x++) {
CGRect rect = CGRectMake(xPos, yPos, width, height);
CGImageRef cImage = CGImageCreateWithImageInRect([image CGImage], rect);
UIImage *dImage = [[UIImage alloc] initWithCGImage:cImage];
[images addObject:dImage];
xPos += width;
}
yPos += height;
}
return images;
}
您可能需要调整一些东西,但希望您能明白。
如果您可以选择,您可以使用 photoshop/gimp 将图像预先拆分为 3 个部分,然后将它们放入捆绑包中。在这种情况下,您不需要在代码中进行图像分割,一切都可以在 IB 中完成。
希望这会有所帮助:)
【讨论】: