首先,我需要描述一下我要做的事情:
所以我会有这些图片:
header_width_1242.png for iphone 6 plus.
header_width_1125.png for iphone 6 plus display zoom
header_width_640.png for iphone 5,6
...
所以我不应该根据比例选择图像,而应该根据宽度选择图像:
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)
?谢谢
答案 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)
使用图片资产
header_width_640.png将其命名为header_width_320.png拖至2x
让image_name =“header_width_”+ UIScreen.mainScreen()。bounds.width)
让image = UIImage(名称:image_name)