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