有没有什么方法可以在模拟器中测试 iPhone 摄像头,而无需在设备上部署?这看起来非常乏味。
您必须在设备上测试许多特定于设备的功能,但这并不比使用模拟器难。只需为设备构建一个调试目标并将其连接到计算机即可。
需要实际设备的操作列表:
我需要测试一些自定义的照片叠加层。 需要根据图像的大小/分辨率调整叠加。
我的处理方式与 Stefan 的建议类似,我决定编写一个“虚拟”相机响应。
当模拟器运行时,我执行此虚拟代码而不是标准的“captureStillImageAsynchronouslyFromConnection”。
在此虚拟代码中,我构建了一张具有必要分辨率的“黑色照片”,然后将其通过管道发送以像普通照片一样处理。 本质上提供了非常快的相机的感觉。
CGSize sz = UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]) ? CGSizeMake(2448, 3264) : CGSizeMake(3264, 2448);
UIGraphicsBeginImageContextWithOptions(sz, YES, 1);
[[UIColor blackColor] setFill];
UIRectFill(CGRectMake(0, 0, sz.width, sz.height));
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
上图相当于当今大多数设备发出的 8MP 照片。 显然,要测试其他分辨率,您需要更改大小。
对于 macOS 13+(可能是 macOS 12)和 Xcode 14+,另一种方法是通过“My Mac(专为 iPhone 设计)”Xcode 目标运行 iPhone 应用程序。
“捕获并保存照片” Swift Playground 提供了使用实时 macOS 相机的 iOS 示例代码。
注意:arm64 Mac 可以直接运行“My Mac (Designed for iPhone)”。但是,x86_64 需要使用“Mac (Mac Catalyst)”通过基于 iOS 的 API 调用来使用实时摄像头。
由于相机在模拟器中不可用,一个好技巧(我知道的唯一一个)就是将视图大小调整为您需要的大小,只是拍摄屏幕截图的时间。您稍后将裁剪它们。
当然,您需要有更大屏幕的设备。
iPad 非常适合测试布局并为所有设备制作快照。 iPhone6+ 的屏幕截图必须稍微拉伸(缩放 1,078125 - 没什么大不了的......)
iOS 设备分辨率快速参考的良好链接:http://www.iosres.com/
下面的@Craig 答案描述了另一种我认为非常聪明的方法 - 它也适用于相机覆盖,与我的相反。