UIImageview programmilly管理iphone5和iphone4

时间:2012-09-28 22:22:57

标签: uiimageview ios6 iphone-4

enter image description here我有一个关于UIImageView管理问题的XIB文件,用于iphone5屏幕高度和Iphone4屏幕高度。

我尝试像这样管理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,

请 谢谢

1 个答案:

答案 0 :(得分:-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;
}