我想实现自己的自动旋转接口方式: 代码:
// 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帮助。
答案 0 :(得分:2)
-shouldAutorotateToInterfaceOrientation:除了返回YES或NO之外,不是为了做任何事情。这不是打电话告诉你iPhone已被旋转,或将被轮换。询问您的viewController是否允许除当前方向之外的方向是一个问题。
如果您没有视图控制器或子类,那么您将不需要此调用。无论哪种方式,你都会返回YES或NO,然后保留它。
代码的其余部分,您可以在点按按钮时使用,或者如果您检测到来自加速度计的移动等。
(一般来说,视图控制器对你有利,并为你做轮换,而且shouldAutorotateToInterfaceOrientation只是你的批准。如果你没有视图控制器工作或想自己旋转一些元素,那么你只需找到合适的时刻代码进行轮换...)
答案 1 :(得分:1)
如果您只是想知道设备的当前方向(可能与UI的旋转不同!),请使用beginGeneratingDeviceOrientationNotifications
和orientation
UIDevice
方法1}}。
如果要在旋转时更改界面,请在didRotateFromInterfaceOrientation
中实施UIViewController
。
答案 2 :(得分:0)
我只是想在用户更改设备的方向时旋转子视图,那么您会推荐什么?