ios - 访问 iPhone 绝对像素位置

标签 ios

在 iPhone/iPad 的屏幕空间中,Apple 使用的点通常是屏幕实际分辨率的一半。我的问题是,是否可以访问实际像素本身?例如,如果我使用一个 UIView,并将其大小/位置设置为 0,0,0.5,0.5,背景颜色为红色,我就无法在屏幕上看到它。

只是想知道这是否可能。

谢谢!

最佳答案

当然可以。

您已有的代码应该可以正常工作(UIView,大小为 (0.5, 0.5))。我刚刚运行它并从模拟器中捕获了这个结果:

enter image description here

是的。这很难看。让我们放大它。

enter image description here

是的,您可以在屏幕上绘制比单个点更小的值。

但是,要绘制单个像素,您需要使用 1/scaleOfScreen 的点值(因为并非所有设备都具有 2x显示)。因此,例如,您希望您的代码看起来像这样:

CGFloat scale = [UIScreen mainScreen].scale;
CGFloat pixelPointWidth = 1/scale;    

UIView* v = [[UIView alloc] initWithFrame:CGRectMake(20, 20, pixelPointWidth, pixelPointWidth)];
v.backgroundColor = [UIColor redColor];
[self.view addSubview:v];

这将创建一个占据屏幕上单个像素的 UIView

不过,如果您想进行大量像素完美的绘图,您可能应该使用比单个 UIView ( have a look at Core Graphics ) .


不过。

在 iPhone 6 Plus 上绘图时,使用此方法可能会遇到一些问题。因为它的屏幕 scale 不同于它的 nativeScale,它会首先在 3x 的逻辑坐标空间中呈现您的内容,然后下采样到 实际 屏幕分辨率(大约 2.6x)。

这很可能会导致一些像素溢出,您的“像素” View 可以在相邻像素中呈现(尽管通常会降低亮度)。

不幸的是,如果不使用更低级别的 API(例如 OpenGL 或 Metal),就没有解决此问题的简单方法,您可以在其中绕过这种自动缩放然后下采样,并直接绘制到屏幕的实际坐标空间中。


  • Have a look here了解不同设备如何在屏幕上呈现内容的简要概述。

  • Have a look here详细了解 iPhone 6 Plus 上的像素溢出是如何发生的。

关于ios - 访问 iPhone 绝对像素位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35501070/

相关文章:

ios - Xcode 8.3.2 中未触发今日扩展断点

ios - 监听 iMessage 或短信通知 - 短信自动回复

ios - 解析检查是否为 nil

iOS 使 VPN 服务器地址可变

ios - 使用 AVAudioPlayer iOS 从 NSData 播放声音

html - iOS 设备上未显示背景图片的问题

iOS:SocketRocket - 如何实现 SSL 握手

ios - 将 managedObjectContext 从应用委托(delegate)传递给 View Controller

ios - 使用 InAppSettingsKit 时读取设置有问题

ios - 检测 ALAuthorizationStatus 更改 iOS