Nano Hash - криптовалюты, майнинг, программирование

Cordova iOS Изменить ориентацию экрана на альбомную на одной странице

У меня есть приложение, разработанное в Cordova 3+ для iPhone. в настоящее время приложение работает нормально. Я также ограничил альбомную ориентацию текущего приложения, т. е. отображение приложения только в портретной ориентации.

Приложение состоит из большого количества описания и страницы отчета. Я хочу отображать все страницы в портретной ориентации и отображать страницу отчетов в альбомной ориентации.

Я использую фреймворк Backbone.js + underscore.js.

У кого-нибудь есть предложения или решения для этого?

Заранее спасибо!

Редактировать: я хочу, чтобы эта конкретная страница отчета отображалась в альбомной ориентации. и отображать все остальные страницы в книжной ориентации.

Изменить: программно управлять ориентацией экрана в iPhone для Cordova 3+


Ответы:


1

Однако я не мог найти никаких решений. Atlast я достиг этого с помощью CSS.

-ms-transform:rotate(-90deg); /* IE 9 */
-webkit-transform:rotate(-90deg); /* Chrome, Safari, Opera */
transform:rotate(-90deg); /* Standard syntax */

В любом случае это не идеальное решение, но оно работает.

Кроме того, вы можете программно изменить одну страницу на альбомную, используя собственный код, и вызвать ее с помощью JavaScript.

Создайте новый файл js как ScreenOrientation.js и вставьте приведенный ниже код:

var ScreenOrientation = {
   //alert(orientation);
callScreenOrientationNative: function(success,fail,orientation) {
   return Cordova.exec( success, fail,
                       "ScreenOrientation",
                       "screenorientationFunction",
                       [orientation]);
}
};

и добавьте вышеуказанный файл в index.html, как показано ниже,

<script type="text/javascript" src="ScreenOrientation.js"></script>

Добавьте приведенную ниже функцию в любой добавленный файл js (в моем проекте я добавил файл script.js для добавления общих функций),

function callScreenOrientation(orientation) {
   ScreenOrientation.callScreenOrientationNative(nativePluginResultHandler,nativePluginErrorHandler,orientation);
}

function nativePluginResultHandler (result) {
}

function nativePluginErrorHandler (error) {
}

В config.xml добавьте ниже имя функции,

<!-- Screen Orientation custom plugin to display reports page. -->
   <feature name="ScreenOrientation">
       <param name="ios-package" value="ScreenOrientation"/>
   </feature>

В разделе «Плагины» добавьте (для Cordova ‹ 3.0),

<plugins>
    <plugin name="ScreenOrientation" value="ScreenOrientation" />
</plugins>

В проектах Cordova> Плагины щелкните правой кнопкой мыши и выберите новый файл, затем в iOS выберите Cocoa touch, затем выберите класс target-C и нажмите «Далее», в имени класса вставьте «ScreenOrientation» и в подклассе «CDVPlugin» и нажмите «Далее» и нажмите «Создать».

Введите ниже в ScreenOrientation.h,

#import <Cordova/CDV.h>

@interface ScreenOrientation : CDVPlugin

- (void) screenorientationFunction:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;

@end

Введите ниже в ScreenOrientation.m,

#import "ScreenOrientation.h"

@implementation ScreenOrientation

- (void) screenorientationFunction:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options {
   [arguments pop];

   NSString *orientation = [arguments objectAtIndex:0];

   if ( [orientation isEqualToString:@"LandscapeLeft"] ) {
       NSLog(@"Landscape Left");
        [[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationLandscapeLeft];
   }
   else if ( [orientation isEqualToString:@"LandscapeRight"] ) {
       NSLog(@"Landscape Right");
       [[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationLandscapeRight];
   }
   else if ( [orientation isEqualToString:@"Portrait"] ) {
       NSLog(@"Portrait");
       [[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationPortrait];
   }
   else if ( [orientation isEqualToString:@"PortraitUpsideDown"] ) {
       NSLog(@"Portrait upSide Down Left");
       [[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationPortraitUpsideDown];
   }
}

@end

В проекте Cordova щелкните поиск и найдите «shouldAutoRotate», найдите ниже и измените возврат, по умолчанию это будет «ДА», измените его на «НЕТ».

CDVViewController.m

- (BOOL)shouldAutorotate
{
    return NO;
}

И в настройках проекта, в Ориентациях устройств отметьте все опции (хотя и не важные),

Project Settings > Device orientation > Tick all 4 options.

и вызовите его из своего проекта следующим образом:

callScreenOrientation('LandscapeLeft');
callScreenOrientation('LandscapeRight');
callScreenOrientation('Portrait');
callScreenOrientation('PortraitUpsideDown');
08.05.2014
  • Спасибо за это! Это большая помощь. Я знаю, что этот пост старый, но я столкнулся с несколькими проблемами с этим, я предполагаю, потому что это более новая версия xcode/ios и т. д. Проблема, с которой я сталкиваюсь, заключается в том, что код отлично работает при повороте экрана после несколько обновлений синтаксиса в коде obj-c, но теперь я столкнулся с проблемой, когда, если вы установите для shouldAutorotate значение NO при выполнении своего кода, он больше не работает. Вернув это значение на «да», все работает нормально, но теперь пользователь имеет полный контроль над тем, когда он вращается, а это не то, что мне нужно. Вы знаете обходной путь? 13.01.2017

  • 2

    Этот плагин позволяет программно поворачивать экран на iOS и Android.

    https://github.com/kant2002/cordova-plugin-screen-orientation

    Ротация Android имеет визуальные сбои из-за производительности (ваш пробег может варьироваться в зависимости от размера DOM), но iOS идеально подходит для ротации.

    18.03.2015

    3

    Официальный плагин Кордовы

    Согласно этой проблеме, даже официальный плагин Cordova (< a href="https://github.com/apache/cordova-plugin-screen-orientation" rel="nofollow noreferrer">cordova-plugin-screen-orientation), для этого есть точка сбоя (которая на данный момент не кажется исправимой ). Это, вероятно, путь, чтобы идти в долгосрочной перспективе.

    Установите плагин, а затем используйте этот JS:

    screen.orientation.lock('landscape');
    

    Or....

    Только CSS

    Вы можете использовать CSS, чтобы исправить это, если вы объедините его с медиа-запросами, но у него тоже есть большая загвоздка. Это не повлияет на то, где открываются клавиатуры, а открытие клавиатур может привести к изменению медиа-запроса:

    Открытие программной клавиатуры на многих устройствах в портретной ориентации приведет к тому, что окно просмотра станет шире, чем в высоту, что заставит браузер использовать альбомный стиль вместо портретного. [документы MDN]

    Если это не имеет значения для вашей страницы, вы можете просто добавить что-то вроде класса с именем orientation-landscape (или вставить с помощью JS, если вы не можете его жестко закодировать), а затем повернуть его, когда медиа-запрос говорит, что это портрет.

    @media (orientation: portrait) {
      .orientation-landscape {
        -webkit-transform: rotate(90deg);
        -ms-transform: rotate(90deg);
        transform: rotate(90deg);
      }
    }
    
    @media (orientation: landscape) {
      .orientation-portrait {
        -webkit-transform: rotate(90deg);
        -ms-transform: rotate(90deg);
        transform: rotate(90deg);
      }
    }
    
    
    /* just to show the change */
    
    .orientation-landscape {
      background: blue;
      color: white;
      padding: 1em;
      text-align: center;
    }
    
    .orientation-portrait {
      border: 1px solid green;
      color: green;
      padding: 1em;
      background: lightgrey;
      text-align: center;
    }
    <div class="orientation-portrait">
      heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo
    </div>
    
    <div class="orientation-landscape">
      heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo heyo
    </div>

    14.05.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..