Iphone 如何在不考虑设备方向的情况下保持UIView指向特定方向?
我有一个观点,我想永远面朝上。假设你有一个UIImageView,它有一个箭头,不管用什么方式握住设备,它都指向上。显然,我需要加速计,但告诉它根据坐标旋转图像只会在我第一次思考时起作用,因为旋转是相对的。有没有更简单的方法?我觉得某个地方会有一个简单的示例应用程序,可以做类似的事情。是您正在寻找的示例应用程序-在iOS参考库中(很棒的文档!)苹果的示例代码正是您想要的;看看这个: 要接收特定的运动数据,请使用Iphone 如何在不考虑设备方向的情况下保持UIView指向特定方向?,iphone,ios,core-animation,uiaccelerometer,Iphone,Ios,Core Animation,Uiaccelerometer,我有一个观点,我想永远面朝上。假设你有一个UIImageView,它有一个箭头,不管用什么方式握住设备,它都指向上。显然,我需要加速计,但告诉它根据坐标旋转图像只会在我第一次思考时起作用,因为旋转是相对的。有没有更简单的方法?我觉得某个地方会有一个简单的示例应用程序,可以做类似的事情。是您正在寻找的示例应用程序-在iOS参考库中(很棒的文档!)苹果的示例代码正是您想要的;看看这个: 要接收特定的运动数据,请使用uiAccelerator的共享实例及其委托 至于旋转,我不确定。请在此处查看“Bub
uiAccelerator
的共享实例及其委托
至于旋转,我不确定。请在此处查看“BubbleLevel”示例代码:
加速计学员文档引用了该代码和其他相关示例代码 应用于视图的变换不是累积的。相反,视图一开始是与其父视图的坐标系对齐的,并且变换是相对于该坐标系应用的 正如其他答案所暗示的那样,苹果的产品中有足够的部分可以满足你的需求<代码>-[LevelViewController Accelerator:didAccelerate:已包含如何提取重力矢量的平滑屏幕相对旋转分量的示例:
// Use a basic low-pass filter to only keep the gravity in the accelerometer values for the X and Y axes
accelerationX = acceleration.x * kFilteringFactor + accelerationX * (1.0 - kFilteringFactor);
accelerationY = acceleration.y * kFilteringFactor + accelerationY * (1.0 - kFilteringFactor);
// keep the raw reading, to use during calibrations
currentRawReading = atan2(accelerationY, accelerationX);
给定和的坐标系,计算视图所需的旋转时需要记住以下几个因素:
atan2
将返回-π/2(-90°),因为输入重力向量为{0.0,-1.0,0.0}cGraffineTransformMakeRotation
创建一个变换,该变换将顺时针(在iOS上)旋转指定的弧度数,但来自atan2
的原始角度指定逆时针旋转view.transform = CGAffineTransformMakeRotation(-(currentRawReading + M_PI/2));
不,我需要一直展示,而不仅仅是风景画和肖像画。是的,我会使用加速计和旋转。不,我需要它一直显示,而不仅仅是横向和纵向。这是y,我会使用加速计和旋转。编辑以回应您的评论。