旋转屏幕
通知原生层旋转屏幕
+ (void) setInterfaceOrientation:(NSDictionary *)dict {
// isupdate hasupdate 是更新qp后的标识,控制旋转,isLLDJ是小游戏标识,控制是否广g
RootViewController *rootVC = (RootViewController *)[UIApplication sharedApplication].keyWindow.rootViewController;
rootVC.needToRotate = YES;
if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"needToRorate"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
NSInteger val = [[dict objectForKey:@"orientation"] integerValue];
[invocation setArgument:&val atIndex:2];
[invocation invoke];
}
rootVC.isRotated = YES;
}
在项目RootViewController中,那个key值在进入程序的时候移除一次
- (NSUInteger) supportedInterfaceOrientations{
#ifdef __IPHONE_6_0
if (ConfigParser::getInstance()->isLanscape()) {
return UIInterfaceOrientationMaskLandscape;
}else{
if (_needToRotate) {
if (_isRotated) {
return UIInterfaceOrientationMaskLandscapeRight;
}
return UIInterfaceOrientationMaskAll;
}else {
return UIInterfaceOrientationMaskPortrait;
}
return UIInterfaceOrientationMaskAll;
return UIInterfaceOrientationMaskPortraitUpsideDown;
}
#endif
}
- (BOOL) shouldAutorotate {
if (ConfigParser::getInstance()->isLanscape()) {
return YES;
}else{
if (_needToRotate) {
if (_isRotated) {
return NO;
}
return YES;
} else {
return NO;
}
return NO;
}
}
在cocos项目中重新设置GLView的frame,重新加载display文件
local frameSize = cc.Director:getInstance():getOpenGLView():getFrameSize()
cc.Director:getInstance():getOpenGLView():setFrameSize(frameSize.height,frameSize.width)
-- 修改DesignResolutionSize 修改lua display相关值 主要是width height互换
cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(frameSize.height, frameSize.width, cc.ResolutionPolicy.NO_BORDER)
CONFIG_SCREEN_WIDTH = 1280
CONFIG_SCREEN_HEIGHT = 720
CONFIG_SCREEN_ORIENTATION = "landscape"
package.loaded['framework.display'] = nil
display = require("framework.display")
适配输入框
先看这里
UIInterfaceOrientation getFixedOrientation(UIInterfaceOrientation statusBarOrientation)
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
statusBarOrientation = UIInterfaceOrientationPortrait;
}
return statusBarOrientation;
}
写的是不是看不懂了,不要急:
-(void) doAnimationWhenKeyboardMoveWithDuration:(float)duration distance:(float)dis
{
[UIView beginAnimations:nil context:nullptr];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:duration];
[UIView setAnimationBeginsFromCurrentState:YES];
//NSLog(@"[animation] dis = %f, scale = %f \n", dis, cocos2d::GLView::getInstance()->getScaleY());
if (dis < 0.0f) dis = 0.0f;
auto glview = cocos2d::Director::getInstance()->getOpenGLView();
dis *= glview->getScaleY();
dis /= self.contentScaleFactor;
switch (getFixedOrientation([[UIApplication sharedApplication] statusBarOrientation]))
{
case UIInterfaceOrientationPortrait:
self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y - dis, originalRect_.size.width, originalRect_.size.height);
break;
case UIInterfaceOrientationPortraitUpsideDown:
self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y + dis, originalRect_.size.width, originalRect_.size.height);
break;
case UIInterfaceOrientationLandscapeLeft:
self.frame = CGRectMake(originalRect_.origin.x - dis, originalRect_.origin.y , originalRect_.size.width, originalRect_.size.height);
break;
case UIInterfaceOrientationLandscapeRight:
self.frame = CGRectMake(originalRect_.origin.x + dis, originalRect_.origin.y , originalRect_.size.width, originalRect_.size.height);
break;
default:
break;
}
[UIView commitAnimations];
}
-(void) doAnimationWhenKeyboardMoveWithDuration:(float)duration distance:(float)dis
{
[UIView beginAnimations:nil context:nullptr];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:duration];
[UIView setAnimationBeginsFromCurrentState:YES];
//NSLog(@"[animation] dis = %f, scale = %f \n", dis, cocos2d::GLView::getInstance()->getScaleY());
if (dis < 0.0f) dis = 0.0f;
auto glview = cocos2d::Director::getInstance()->getOpenGLView();
dis *= glview->getScaleY();
dis /= self.contentScaleFactor;
switch (getFixedOrientation([[UIApplication sharedApplication] statusBarOrientation]))
case UIInterfaceOrientationPortrait:
{
BOOL needToRorate = [[NSUserDefaults standardUserDefaults] boolForKey:@"needToRorate"];
if (not needToRorate) {
self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y - dis, originalRect_.size.height, originalRect_.size.width);
}
else {
self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y - dis, originalRect_.size.width, originalRect_.size.height);
}
break;
}
case UIInterfaceOrientationPortraitUpsideDown:
self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y + dis, originalRect_.size.width, originalRect_.size.height);
break;
case UIInterfaceOrientationLandscapeLeft:
self.frame = CGRectMake(originalRect_.origin.x - dis, originalRect_.origin.y , originalRect_.size.width, originalRect_.size.height);
break;
case UIInterfaceOrientationLandscapeRight:
self.frame = CGRectMake(originalRect_.origin.x + dis, originalRect_.origin.y , originalRect_.size.width, originalRect_.size.height);
break;
default:
break;
}
[UIView commitAnimations];
}
网友评论