如何获取设备的缩放因子?

66

我一直在使用 UIGraphicsBeginImageContextWithOptions(),注意到该方法的最后一个字段是一个 scalefactor。苹果文档中指出,如果我将其设置为 0.0,则会使用设备主屏幕的默认比例因子。是否有一种方法可以通过属性或方法获取该默认比例因子?


在图像的上下文中,UIImage 作为一个 scale 属性,以防您不想被绑定到设备而是绑定到内容。 - Juan Boero
6个回答

117
设备的比例因子是UIScreen的属性,你可以通过以下方式获取它::

[UIScreen mainScreen].scale;

这里有文档


2
对于iPhone 6+/7+/8+,如果您想要完美地对齐屏幕像素,则可以考虑使用UIScreen.main.nativeScale(Swift代码,适用于iOS 8+)。例如,一个像素的分隔线或发际线,在6/7/8上为2px,在6+/7+/8+上为3px,就像分段控件的边框一样。 - John Pang

41

Swift 3+ 版本:

UIScreen.main.scale

8
Swift3: UIScreen.main.scale 翻译为:屏幕主要比例。 - twodayslate

3

Swift5+ / macOS Big Sur:

let backingScaleFactor = NSScreen.main?.backingScaleFactor

3

Swift 5+

let scale = UIScreen.main.scale
print("scale is:\(scale)")

这与3年前更新的Swift 3+答案有何不同? - undefined

-1
Swift 5.9
let screenScale: CGFloat = view.window?.windowScene?.screen.scale

-2
希望这能对你有所帮助。
 CGSize textcontent =CGSizeMake(width, height);
UIGraphicsBeginImageContext(textcontent);
if ([UIScreen instancesRespondToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0f)
{
    UIGraphicsBeginImageContextWithOptions(textcontent, YES, 1.0f);
}
else
{
    UIGraphicsBeginImageContext(textcontent);
}
 [view.layer renderInContext:UIGraphicsGetCurrentContext()];
 viewImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 return viewImage;

5
[[UIScreen mainScreen] scale] == 2.0f 这种比较浮点数的方式是错误的,请不要使用 == - user529758
你是否导入了以下代码:#import <QuartzCore/QuartzCore.h> - Sudha Tiwari
1
你在说什么? - user529758

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接