自定义自动旋转iPhone SDK

时间:2009-09-26 17:48:21

标签: iphone interface sdk

我想实现自己的自动旋转接口方式: 代码:

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 NSLog(@"should!");
 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration:0.4];
 if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
  trash.transform = CGAffineTransformMakeRotation(M_PI*0.5);
 }
 else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
  trash.transform = CGAffineTransformMakeRotation(-M_PI*0.5);
 }
 else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
  trash.transform = CGAffineTransformIdentity;//CGAffineTransformMakeRotation(M_PI);
 }
 else {
  trash.transform = CGAffineTransformIdentity;

 }
 [UIView commitAnimations];
 return NO;
}

如你所见,我有一个UIView(实际上是UIImageView) - 垃圾,当我更改界面方向时,我正在使用CGAffineTransformMakeRotation旋转它。它工作得很好,除了,当界面方向是默认肖像时,方法永远不会被调用(向上工作)。因此,垃圾桶会旋转到上一个方向而不是默认方向。 我很担心方法上面的注释(在创建UIViewController时自动添加),它表示“允许除默认纵向方向以外的方向”。

当我返回YES而不是NO时,当然会为每个方向调用该方法,但我不想为整个界面设置动画,而只是为某些元素设置动画。

Plz帮助。

3 个答案:

答案 0 :(得分:2)

-shouldAutorotateToInterfaceOrientation:除了返回YES或NO之外,不是为了做任何事情。这不是打电话告诉你iPhone已被旋转,或将被轮换。询问您的viewController是否允许除当前方向之外的方向是一个问题。

如果您没有视图控制器或子类,那么您将不需要此调用。无论哪种方式,你都会返回YES或NO,然后保留它。

代码的其余部分,您可以在点按按钮时使用,或者如果您检测到来自加速度计的移动等。

(一般来说,视图控制器对你有利,并为你做轮换,而且shouldAutorotateToInterfaceOrientation只是你的批准。如果你没有视图控制器工作或想自己旋转一些元素,那么你只需找到合适的时刻代码进行轮换...)

答案 1 :(得分:1)

如果您只是想知道设备的当前方向(可能与UI的旋转不同!),请使用beginGeneratingDeviceOrientationNotificationsorientation UIDevice方法1}}。

如果要在旋转时更改界面,请在didRotateFromInterfaceOrientation中实施UIViewController

答案 2 :(得分:0)

我只是想在用户更改设备的方向时旋转子视图,那么您会推荐什么?