如何在不调整大小的情况下获取图像?

时间:2016-02-24 12:45:59

标签: ios ios8 uiimage ios9

首先,我需要描述一下我要做的事情:

  1. 我需要为所有设备显示全屏宽度的标题图像。
  2. 因为我应该提供不同大小的多张图片,而不仅仅是2x和3x。
  3. 所以我会有这些图片:

    1. header_width_1242.png for iphone 6 plus.

    2. header_width_1125.png for iphone 6 plus display zoom

    3. header_width_640.png for iphone 5,6

      ...

    4. 所以我不应该根据比例选择图像,而应该根据宽度选择图像:

      let image_name = "header_width_" + String(UIScreen.mainScreen().scale * UIScreen.mainScreen().bounds.width)
      
      let image = UIImage(named:image_name)
      

      问题是,ios会再次自动缩放图像。所以如果设备具有2x的比例。然后它返回图像* 2大小。

      例如:对于宽度为320且比例为2的iphone 5,我需要header_width_640.png,但似乎系统将图像缩放到1280(640 * 2)。

      我怎么能告诉系统,在没有缩放的情况下返回图像UIImage(named:image_name)?谢谢

3 个答案:

答案 0 :(得分:1)

您可以在using myNewSet = mpl::fold< mySet, mpl::set0<>, mpl::insert<mpl::_1, container<mpl::_2> >::type; 上声明screenSize媒体资源。

viewController

然后,当您需要设置图像时,您可以执行以下操作:

// Determine screen size
let screenSize: CGRect = UIScreen.mainScreen().bounds

答案 1 :(得分:1)

您不应该按屏幕大小限制资源,如果使用大小类(如果可用),则更好。通过选择每个图像的大小类,图像资源目录可以在检查器面板中实现此目的 我确实理解有时需要,但尝试从相对的角度思考。
如果图像是左右对齐的徽标,您可以使用切片在图像上创建可伸展的结束/开始。登记/> 如果图像是纯色的中心或代码可绘制的东西,您可以在运行时绘制它 这是ObjC中的一个片段,在我的应用程序中使用,您可以轻松转换为SWIFT:

-(UIImage*) createNavBarBackgroundWithImage:(UIImage*) image {
    CGSize  screenSize = ((CGRect)[[UIScreen mainScreen] bounds]).size;
    CGFloat width = screenSize.width;
    CGFloat height = 64.0;
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), NO, 0.0);
    //Draw background
    UIColor * backGroundColor = [UIColor colorWithRed:27.f/255.f green:142.f/255.f blue:138.f/255.f alpha:1.0];
    [backGroundColor setFill];
    UIRectFill(CGRectMake(0, 0, width, height));
    //Draw the image at the center
    CGPoint point = CGPointMake(width/2 - image.size.width/2, 0);
    [image drawAtPoint:point];;

    UIImage *newBGImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newBGImage;
} 

答案 2 :(得分:0)

使用图片资产

https://developer.apple.com/library/ios/recipes/xcode_help-image_catalog-1.0/chapters/AddingImageSets.html

  1. header_width_1242.png for iphone 6 plus。将其命名为header_width_414.png拖动到3x
  2. header_width_1125.png将其命​​名为header_width_375.png拖至3x
  3. header_width_640.png将其命​​名为header_width_320.png拖至2x

    让image_name =“header_width_”+ UIScreen.mainScreen()。bounds.width)

    让image = UIImage(名称:image_name)