Rotation issue with ios 8 for view which are added

2019-04-28 06:21发布

enter image description hereI have created category for view rotation, And added views on controllers view as well as on window(for showing custom indicator). My code is working fine up to 7.X with xCode 5.X as well as xCode6-beta6. But is not proper with IOS 8 beta. Its seems like windows rotation is not working with ios 8 beta same like older ios.

Can you please suggest me.... Thanks a lot in advance.

My code is look like

- (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];
 }
}

3条回答
SAY GOODBYE
2楼-- · 2019-04-28 06:30

I have tried a lot of fixes... and its working with patch like

{
[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];
}

and reseting angle to 0 degree for CGAffineTransformMakeRotation for all kind of device mode., for ios 8.

This is not a proper solution i know, but I don't have any alternate way so waiting for a good answer.

查看更多
贼婆χ
3楼-- · 2019-04-28 06:34

Had similar problem. Surprisingly the fix was to comment out all the code related to self.window on Appdelegate.

Commented initialising of self.window and its assignment. Set the initial view in storyboard in Attributes inspector by checking "Is Initial View Controller" checkbox.

New Better Solution
Commenting self.window was causing other issues. Instead the below code is best:

- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification 
    {
         [UIViewController attemptRotationToDeviceOrientation];
    }
查看更多
叼着烟拽天下
4楼-- · 2019-04-28 06:42

In my case, simply setting the rotation angle to 0 for all orientations fixed the problem. Prior to iOS 8 UIWindow coordinates were always in Portrait orientation, so you had to handle rotation yourself. This is no longer necessary in iOS 8. As to why you would be adding UIViews to a UIWindow, I do this for alerts that I want to display on top of everything else regardless of current view hierarchy.

查看更多
登录 后发表回答