2014-09-05 73 views
6

enter image description here我創建了視圖旋轉的類別,並在控制器視圖以及窗口(用於顯示自定義指標)上添加了視圖。 我的代碼在xCode 5.X以及xCode6-beta6中正常工作到7.X。但是IOS 8測試版不適合。 它似乎像Windows旋轉不工作與ios 8測試版相同像老ios。ios 8添加到窗口的視圖的旋轉問題

您能否請我建議.... 非常感謝。

我的代碼看起來像

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration { 
if(!self.isIpad) 
{ 

    [menu.view rotateViewToOrientation:newStatusBarOrientation animated:YES]; 
    if(newStatusBarOrientation==UIInterfaceOrientationPortrait || newStatusBarOrientation==UIInterfaceOrientationPortraitUpsideDown) 
    { 
     if (IS_IPHONE_5) { 
      menu.view.frame= CGRectMake(0, 518, 320, 50); 
     } else { 
      menu.view.frame= CGRectMake(0, 430, 320, 50); 
     } 

    } else if(newStatusBarOrientation==UIInterfaceOrientationLandscapeLeft) { 

     if (IS_IPHONE_5) { 
      menu.view.frame= CGRectMake(270,0,50,568); 
     } else { 
      menu.view.frame= CGRectMake(270,0,50,480); 
     } 

    } else { 

     if (IS_IPHONE_5) { 
      menu.view.frame= CGRectMake(0,0,50,568); 
     } else { 
      menu.view.frame= CGRectMake(0,0,50,480); 
     } 
    } 
    [menu reloadMenu]; 
    } 
} 


//Method of Menu Class for orientation change setup 
- (void)rotateViewToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated { 
CGPoint center = self.center; 
CGRect bounds = self.bounds; 
CGAffineTransform transform = CGAffineTransformIdentity; 
int intOri=orientation; 
switch (intOri) { 
    case UIInterfaceOrientationPortraitUpsideDown: 
     transform = CGAffineTransformMakeRotation(M_PI); 
     break; 
    case UIInterfaceOrientationLandscapeLeft: 
     transform = CGAffineTransformMakeRotation(-M_PI_2); 
     break; 
    case UIInterfaceOrientationLandscapeRight: 
     transform = CGAffineTransformMakeRotation(M_PI_2); 
     break; 
    case UIInterfaceOrientationPortrait: 
     transform = CGAffineTransformMakeRotation(0); 
     break; 

} 
if (animated) { 
    [UIView beginAnimations:nil context:nil]; 
} 
self.transform = transform; 
bounds = CGRectApplyAffineTransform(bounds, transform); 
self.bounds = CGRectMake(0, 0, bounds.size.width, bounds.size.height); 
self.center = center; 
if (animated) { 
    [UIView commitAnimations]; 
} 
} 
+0

粘貼一些代碼,並告訴你如何獲得的問題,有什麼功能不調用,否則任何事情? – Jageen 2014-09-05 11:42:13

+0

一般來說,大多數開發人員不知道如何構建適當的視圖層次結構,這可能是問題的根源 - 您能否發佈一些關於如何構建您的代碼的代碼? – holex 2014-09-05 11:54:31

+0

@Jageen我已經添加了我的代碼,您能否以任何方式給我建議,我應該如何使我的應用程序兼容ios 8。 – 2014-09-05 12:21:26

回答

7

我已經嘗試了很多修正...及其補丁那樣工作

{ 
[self.window setBounds:temp]; 
[menu.view setFrame:CGRectMake(0, self.window.frame.size.height-50, self.window.frame.size.width, 50)]; 
[menu.view removeFromSuperview]; 
[self.window addSubview:menu.view]; 
[self.window makeKeyAndVisible]; 
} 

,並正在重置角度爲0度CGAffineTransformMakeRotation所有類型對於ios 8.

這不是我知道的一個合適的解決方案,但我沒有任何替代方式,所以等待一個很好的答案。

+0

你搖擺的人。 :) – NaXir 2014-10-27 08:11:53

+0

你把這個代碼放在哪裏? – ahalls 2014-10-27 19:23:53

4

在我的情況下,只需將所有方向的旋轉角度設置爲0即可解決問題。在iOS 8之前,UIWindow座標始終處於縱向,因此您必須自己處理旋轉。這在iOS 8中不再是必需的了。至於爲什麼要將UIViews添加到UIWindow中,我這樣做是爲了在不考慮當前視圖層次結構的情況下顯示在其他所有內容上的警報。

1

有類似的問題。令人驚訝的是,解決方法是在Appdelegate上註釋與self.window相關的所有代碼。

評論初始化self.window及其賦值。通過選中「初始視圖控制器」複選框,在「屬性」檢查器中的故事板中設置初始視圖。

新的更好的解決方案
談到self.window是造成其他問題。相反,下面的代碼是最好的:

- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification 
    { 
     [UIViewController attemptRotationToDeviceOrientation]; 
    }