Last active
August 29, 2015 14:06
-
-
Save nileshpunjabi/5e4ee590ccd2da1afe3f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameOrOrientationChanged:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; | |
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameOrOrientationChanged:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; | |
- (void)statusBarFrameOrOrientationChanged:(NSNotification *)notification | |
{ | |
/* | |
This notification is most likely triggered inside an animation block, | |
therefore no animation is needed to perform this nice transition. | |
*/ | |
[self rotateAccordingToStatusBarOrientationAndSupportedOrientations]; | |
} | |
- (void)rotateAccordingToStatusBarOrientationAndSupportedOrientations | |
{ | |
UIInterfaceOrientation statusBarOrientation = [UIApplication sharedApplication].statusBarOrientation; | |
CGFloat angle = UIInterfaceOrientationAngleOfOrientation(statusBarOrientation); | |
CGFloat statusBarHeight = [[self class] getStatusBarHeight]; | |
CGAffineTransform transform = CGAffineTransformMakeRotation(angle); | |
CGRect frame = [[self class] rectInWindowBounds:[AppDelegate instance].window.bounds | |
statusBarOrientation:statusBarOrientation | |
statusBarHeight:statusBarHeight]; | |
[self setIfNotEqualTransform:transform frame:frame]; | |
} | |
- (void)setIfNotEqualTransform:(CGAffineTransform)transform frame:(CGRect)frame | |
{ | |
if(!CGAffineTransformEqualToTransform(avPlayerLayer.affineTransform , transform)) | |
{ | |
[avPlayerLayer setAffineTransform:transform]; | |
} | |
if(!CGRectEqualToRect(avPlayerLayer.frame, frame)) | |
{ | |
avPlayerLayer.frame = frame; | |
} | |
} | |
+ (CGFloat)getStatusBarHeight | |
{ | |
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; | |
if(UIInterfaceOrientationIsLandscape(orientation)) | |
{ | |
return [UIApplication sharedApplication].statusBarFrame.size.width; | |
} | |
else | |
{ | |
return [UIApplication sharedApplication].statusBarFrame.size.height; | |
} | |
} | |
+ (CGRect)rectInWindowBounds:(CGRect)windowBounds statusBarOrientation:(UIInterfaceOrientation)statusBarOrientation statusBarHeight:(CGFloat)statusBarHeight | |
{ | |
CGRect frame = windowBounds; | |
frame.origin.x += statusBarOrientation == UIInterfaceOrientationLandscapeLeft ? statusBarHeight : 0; | |
frame.origin.y += statusBarOrientation == UIInterfaceOrientationPortrait ? statusBarHeight : 0; | |
frame.size.width -= UIInterfaceOrientationIsLandscape(statusBarOrientation) ? statusBarHeight : 0; | |
frame.size.height -= UIInterfaceOrientationIsPortrait(statusBarOrientation) ? statusBarHeight : 0; | |
return frame; | |
} | |
CGFloat UIInterfaceOrientationAngleOfOrientation(UIInterfaceOrientation orientation) | |
{ | |
CGFloat angle; | |
switch (orientation) | |
{ | |
case UIInterfaceOrientationPortraitUpsideDown: | |
angle = M_PI; | |
break; | |
case UIInterfaceOrientationLandscapeLeft: | |
angle = -M_PI_2; | |
break; | |
case UIInterfaceOrientationLandscapeRight: | |
angle = M_PI_2; | |
break; | |
default: | |
angle = 0.0; | |
break; | |
} | |
return angle; | |
} | |
UIInterfaceOrientationMask UIInterfaceOrientationMaskFromOrientation(UIInterfaceOrientation orientation) | |
{ | |
return 1 << orientation; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment