diff --git a/src/ios/YoikScreenOrientation.m b/src/ios/YoikScreenOrientation.m index e6139dd..e1f077b 100644 --- a/src/ios/YoikScreenOrientation.m +++ b/src/ios/YoikScreenOrientation.m @@ -30,9 +30,8 @@ SOFTWARE. // this method does not control the orientation, it is set in the .js file. // SEE https://github.com/Adlotto/cordova-plugin-recheck-screen-orientation - // ------------------ - // HACK: Force rotate by changing the view hierarchy. Present modal view then dismiss it immediately. + UIViewController *vc = [[UIViewController alloc] init]; vc.view.alpha = 0; @@ -43,10 +42,29 @@ SOFTWARE. }); }]; - // Assume everything went ok - CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + // grab the device orientation so we can pass it back to the js side. + NSString *orientation; + switch ([[UIDevice currentDevice] orientation]) { + case UIDeviceOrientationLandscapeLeft: + orientation = @"landscape-secondary"; + break; + case UIDeviceOrientationLandscapeRight: + orientation = @"landscape-primary"; + break; + case UIDeviceOrientationPortrait: + orientation = @"portrait-primary"; + break; + case UIDeviceOrientationPortraitUpsideDown: + orientation = @"portrait-secondary"; + break; + default: + orientation = @"portait"; + break; + } + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK + messageAsDictionary:@{@"device":orientation}]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; - // ------------------ } @end \ No newline at end of file diff --git a/www/screenorientation.ios.js b/www/screenorientation.ios.js index 99f5e4c..22ed12d 100644 --- a/www/screenorientation.ios.js +++ b/www/screenorientation.ios.js @@ -1,5 +1,6 @@ var exec = require('cordova/exec'), screenOrientation = {}, + iosOrientation = 'unlocked', orientationMap = { 'portrait': [0,180], 'portrait-primary': [0], @@ -11,14 +12,26 @@ var exec = require('cordova/exec'), }; screenOrientation.setOrientation = function(orientation) { - exec(null, null, "YoikScreenOrientation", "screenOrientation", ['set', orientation]); + iosOrientation = orientation; + + var success = function(res) { + if (orientation === 'unlocked' && res.device) { + iosOrientation = res.device; + + setTimeout(function() { + iosOrientation = 'unlocked'; + },0); + } + }; + + exec(success, null, "YoikScreenOrientation", "screenOrientation", ['set', orientation]); }; module.exports = screenOrientation; // ios orientation callback/hook window.shouldRotateToOrientation = function(orientation) { - var currOrientation = cordova.plugins.screenorientation.currOrientation, + var currOrientation = iosOrientation, map = orientationMap[currOrientation] || orientationMap['default']; return map.indexOf(orientation) >= 0; };