我的应用程序仅支持横向右方向。
我正在尝试转换到视图控制器的视图,但是当它执行过渡动画(例如卷曲)时,视图旋转 90 度(因此,模拟器仍处于横向右方向,但视图显示为旋转) 90 度)。过渡完成后,它会旋转到正确的方向。我的代码如下。
- (IBAction)buttonTouched
{
MyViewController *aViewController = [[MyViewController alloc] initWithNibName:NSStringFromClass([MyViewController class]) bundle:nil];
[UIView transitionFromView:self.view
toView:aViewController.view
duration:2
options:UIViewAnimationOptionTransitionCurlUp
completion:NULL];
}
视图似乎没有收到“方向已更改”通知,因此它以纵向显示,然后在动画完成后更改为横向。我已经在 IB 中设置了它,以便它全部以横向布局。
编辑:我还尝试将视图控制器添加到自身的 IB 文件并转换到该视图(认为初始化和转换之间可能太接近),但发生了同样的事情。
好吧,主要原因是 self.view (当前“知道”您处于横向状态)正在被一个没有该信息的新视图替换。所以一种想法是将 aViewController.view 作为 self.view 的子视图(假设 aViewController 是不透明的)。啊,你说,但是我失去了transitionFromView 的漂亮动画。好吧,试试这个好处:
[UIView transitionWithView:self.view
duration:2
options:UIViewAnimationOptionTransitionCurlUp
animations:^{
[self.view addSubview:aViewController.view];
}
completion:NULL];
如果由于某种原因这对你不起作用,另一种方法是“教导” aViewController.view 它实际上是一个横向视图:
#define DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) / 180.0 * M_PI)
-(void)setNewViewToLandscape:(UIView*)viewObject {
//assumes self.view is landscape and viewObject is portrait
[viewObject setCenter:CGPointMake( self.view.frame.size.width/2,self.view.frame.size.height/2)];
CGAffineTransform cgCTM = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(90));
viewObject.transform = cgCTM;
viewObject.bounds = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
}
MyViewController *aViewController = [[MyViewController alloc] initWithNibName:NSStringFromClass([MyViewController class]) bundle:nil];
[self setNewViewToLandscape:aViewController.view];
[UIView transitionFromView:self.view
toView:aViewController.view
duration:2
options:UIViewAnimationOptionTransitionCurlUp
completion:NULL];
一个额外的小问题是您的 aViewController 正在泄漏,因此您应该将其作为父 viewController 的保留属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)