0

我有一个mpmovieplayercontroller顶部的小视图。当它不是全屏时,我可以将视图的框架调整到方向(当设备旋转时)。但是当我进入全屏模式时,尽管我设法呈现视图,但我无法在设备旋转时保持正确的帧。它看起来像全屏模式,系统只是在状态栏和moviePlayer上使用CGAffineTransformRotate。我如何应用这个CGAffineTransformRotate来正确旋转我的视图?iphone:在mpmovieplayercontroller中旋转?


编辑:

好了,我更新的代码在的MPMoviePlayerController的定向的改变后转动的X轴90%,但第一旋转之后的视图简单地消失。这里是我的代码:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 


    float angle = M_PI/2; //rotate 180°, or 1 π radians 
    theView.layer.transform = CATransform3DMakeRotation(angle, 1.0, 0.0, 0.0); 


    [self changePositionBasedOnOrientation:toInterfaceOrientation]; //here we change the frame of the view 


} 

回答

2

好吧,

所以叠加在全屏模式下的的MPMoviePlayerController最好的办法就是给它这样的:

[[[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0] addSubview:mySubview] 

这是一个有点哈克,但合法。它给你一个简单的方法来处理旋转(而不是使用转换)。

+0

这不是最好的方法,而是一种可能的方法。 – Till 2013-03-14 00:24:08

2

我不知道这是否会必然是这样做(我猜你要添加一个子视图到MPMoviePlayerController看法?)的正确方式,但你似乎什么要在电影播放器​​全屏旋转时进行回调,以便您可以调整自己的自定义视图。

您可以在自定义视图上注册轮换通知,然后每次收到回调时都可以自行调整。您注册转动通知如下:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(layoutViewForOrientation:) 
    name:UIDeviceOrientationDidChangeNotification 
    object:nil]; 

你应该记得endGeneratingDeviceOrientationNotifications和删除您的通知观察者,当你用全屏模式来完成。

+0

+1正确的答案。另外还有一点 - 为了保持自定义子视图的正确尺寸,只需应用仿射变换(不需要考虑切换后的坐标),就可以再次应用其原始框架。 – Till 2011-04-03 11:18:36

+0

是的,我很清楚如何检测方位变化。我的问题在于转换。你可以请张贴一些关于如何基于旋转mpmovieplayercontroller(全屏)实际旋转视图的代码? – Alex1987 2011-04-03 12:19:35

+0

旋转视图的方式取决于其内容,但您可能需要a)检查当前方向,然后b)使用适当方向的变换来旋转该视图。如果您不确定如何应用转换本身,请查看此问题:http://stackoverflow.com/questions/242424/how-to-rotate-a-layer-view-eg-just-like-you-would -in-enigmo – lxt 2011-04-03 13:14:44