我的tableview有4个单元格,每个单元格有一个不同的背景图片。当iPhone旋转时更改单元格中的背景图像
当我旋转iPhone时,行的高度会改变,还有图片。
如果位置处于横向或纵向位置,则很容易更改图片,但当iPhone已旋转而不是旋转时,图片会发生变化! 什么问题? 例如:iPhone处于纵向状态,用户将其旋转为横向。 这是非常丑陋的效果,因为只有当iPhone处于横向时图片才会变化,并且在几分之一秒内用户看到变形的肖像图片(在它变化之前)。
我该如何解决?
感谢
我的tableview有4个单元格,每个单元格有一个不同的背景图片。当iPhone旋转时更改单元格中的背景图像
当我旋转iPhone时,行的高度会改变,还有图片。
如果位置处于横向或纵向位置,则很容易更改图片,但当iPhone已旋转而不是旋转时,图片会发生变化! 什么问题? 例如:iPhone处于纵向状态,用户将其旋转为横向。 这是非常丑陋的效果,因为只有当iPhone处于横向时图片才会变化,并且在几分之一秒内用户看到变形的肖像图片(在它变化之前)。
我该如何解决?
感谢
最简单的办法:
实现您的视图控制器willAnimateRotationToInterfaceOrientation
。在这种方法中,您可以重新调整图片的方向,并自动生成动画。有一个简短的概述,这和其他可用的接口定位方法在http://www.dizzey.com/development/ios/handling-layout-on-uiinterfaceorientation-change/
白白艰难的道路:
您可以手动跟踪加速,写自己的动画块。 将您的视图控制器设置为UIAccelerometerDelegate。如下所示参考共享加速度计。
accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = 1.0f/60.0f;
然后执行这个委托方法。每当加速度计发现加速度时,都会执行此操作。跟踪X轴上的加速度将为您提供横向/纵向定位。
#pragma mark UIAccelerometer delegate method
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
if(acceleration.x > 0.8) //landscape right
{
[UIView beginAnimations:@"text spin" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:0.2];
//do some animation to landscape right
[UIView commitAnimations];
}
if(acceleration.x < -0.8) //landscape left
{
[UIView beginAnimations:@"text spin" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:0.2];
//do some animation to landscape left
[UIView commitAnimations];
}
if(acceleration.x < 0.2 && acceleration.x > -0.2) //portrait
{
[UIView beginAnimations:@"text spin" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:0.2];
//do some animation to portrait view
[UIView commitAnimations];
}
在这样的情况下,一个旋转的过程中我倾向于只使用上的元素(myObject.hidden = YES)的.hidden属性,然后恢复它们的旋转完成时。
我想你的相框在横向视图中有更多的空间 - 另一个建议如果这是真的,就是让它们在两个方向都保持相同的大小,那么在旋转过程中就不需要隐藏它们。
希望这会有所帮助!
太好了,谢谢! – JAA