3

在此处输入图像描述我有一个关于通过 XIB 文件管理 iphone5 屏幕高度和 Iphone4 屏幕高度的 UIImageView 的问题。

我尝试像这样管理 UIImageView 的代码

~

 CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) {
        backgroundImage.autoresizingMask=UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
        frameView.autoresizingMask=UIViewAutoresizingFlexibleHeight;


        backgroundImage.image = [UIImage imageNamed:@"bg-568h@2x.png"];
        //frameView.frame=CGRectMake(16, 0, 288, 527);

        frameView.image = [UIImage imageNamed:@"setframe-568h@2x.png"];
    }
    else
    {
        backgroundImage.image = [UIImage imageNamed:@"bg@2x.png"];
        frameView.image = [UIImage imageNamed:@"setframe@2x.png"];
    }  ;

请就问题向我提出建议,FrameView 是具有白色图像的 UIImageView,

请谢谢

4

1 回答 1

-1

我遇到了同样的问题,下面是我为使它对我有用所做的工作。

我有几个应用程序中使用的图像,需要为新的 4 英寸显示屏调整大小。我编写了下面的代码来根据需要自动调整图像大小,而无需指定视图的高度。此代码假定给定图像的高度在 NIB 中调整为给定帧的全高,就像它是填充整个视图的背景图像一样。在 NIB 中,UIImageView 不应设置为拉伸,这将为您完成拉伸图像的工作并扭曲图像,因为只有高度发生变化而宽度保持不变。您需要做的是将高度和宽度调整相同的增量,然后将图像向左移动相同的增量以再次居中。这会在两侧切掉一点,同时使其扩展到给定框架的整个高度。

我这样称呼它...

[self resizeImageView:self.backgroundImageView intoFrame:self.view.frame];

如果图像是在 NIB 中设置的,我通常会在 viewDidLoad 中执行此操作。但我也有在运行时下载并以这种方式显示的图像。这些图像是用 EGOCache 缓存的,所以我必须在将缓存的图像设置到 UIImageView 之后或在图像下载并设置到 UIImageView 之后调用 resize 方法。

下面的代码并不特别关心显示器的高度是多少。它实际上可以与任何显示尺寸一起使用,也许也可以处理调整图像大小以进行旋转,认为它假设每次高度变化都大于原始高度。为了支持更大的宽度,还需要调整此代码以响应该场景。

- (void)resizeImageView:(UIImageView *)imageView intoFrame:(CGRect)frame {
    // resizing is not needed if the height is already the same
    if (frame.size.height == imageView.frame.size.height) {
        return;
    }

    CGFloat delta = frame.size.height / imageView.frame.size.height;
    CGFloat newWidth = imageView.frame.size.width * delta;
    CGFloat newHeight = imageView.frame.size.height * delta;
    CGSize newSize = CGSizeMake(newWidth, newHeight);
    CGFloat newX = (imageView.frame.size.width - newWidth) / 2; // recenter image with broader width
    CGRect imageViewFrame = imageView.frame;
    imageViewFrame.size.width = newWidth;
    imageViewFrame.size.height = newHeight;
    imageViewFrame.origin.x = newX;
    imageView.frame = imageViewFrame;

    // now resize the image
    assert(imageView.image != nil);
    imageView.image = [self imageWithImage:imageView.image scaledToSize:newSize];
}

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
于 2012-10-08T02:11:33.690 回答