我正在尝试为iOS平板电脑编写一个增强现实应用程序。为此,我使用AVFoundation类将视频从相机转换到屏幕。增强物体是简单的UILabels
"在空中飞行"。即使你旋转平板电脑,标签也必须看起来像在你面前,并保存位置。和往常一样,我使用CMMotionManager
来捕获设备陀螺仪数据。我的问题是-我不能正确地将设备旋转四元数应用于飞行的UILabel
s。标签围绕它们自己的轴旋转,但它们必须"围绕平板电脑轴"旋转。如何从数学上描述这一点?目前,我只知道平板电脑周围的一个假想球体,标签位于这个球体上,当你旋转平板电脑时,这个假想球体会绕着同一轴以相反的方向旋转标签。我不想使用任何第三方libs。
我也开发过类似的应用程序。但就我而言,情况有点不同。我用的是UIImageView
而不是UILabel
。我所做的是制作了另一个UIView
,并将其背景设置为默认/透明。在那个视图上,我放置了我的UIImageView
,它在UIView
旋转时旋转,但CameraView UIView
在旋转时产生了问题。幸运的是,根据我的要求,我必须强制设备方向保持在横向模式。我使用的:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeRight;
}
和
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
所以添加一个透明的UIView
。然后检查问题是否仍然存在——在所有四个可能的方向上定义你的UIInterfaceOrientationMask
,看看它是否有效。
最后我决定使用这个库:https://github.com/antonholmquist/rend-ios.在纯UIKit上执行此任务并不容易。