标签: device-orientation

平板时iPad设备的方向总是错误的

我知道这个主题在SO上引起了很多关注,但没有一个"解决方案"对我有用.情况如下:

  1. iPad在我的桌面上是平的(面朝上的设备方向),主屏幕是完全可读的,但主页按钮在顶部.所以这有效地显示了"Portrait Up Side Down" 界面方向.

  2. 我开始我的应用程序

  3. 该应用程序调用beginGeneratingDeviceOrientationNotifications以确保加速计正在工作,并且方向通知进入.

  4. 在启动时,我的应用程序会查询"界面方向"和"设备方向".结果是:

     STARTUP ORIENTATION:
         INTERFACE ORIENTATION: UIInterfaceOrientationPortrait
         DEVICE ORIENTATION: UIDeviceOrientationFaceUp
    
    Run Code Online (Sandbox Code Playgroud)

    Apple文档说每个应用程序(界面?)都是纵向开始的,所以这很有意义.设备方向也是正确的,因为这确实是正面朝上的.

  5. 发布后,第一个方向通知即将进入:

    NOTIFICATION 1: 
        INTERFACE: UIInterfaceOrientationPortrait   
        DEVICE: UIDeviceOrientationPortrait
    
    Run Code Online (Sandbox Code Playgroud)

    再一次,界面的肖像(这与我期望的相反,主屏幕显示自己向上朝下的方向),该设备也被称为纵向(不是这样,但这是显而易见的一个聪明的方案,以解决当设备面朝上或朝下时如何定位应用程序的内容).

  6. 正如许多人提到的那样,另一个(只有一个,而不是两个)方向通知如下:

    NOTIFICATION 2: 
        INTERFACE: UIInterfaceOrientationPortrait   
        DEVICE: UIDeviceOrientationFaceUp
    
    Run Code Online (Sandbox Code Playgroud)

    接口仍然是纵向(而不是正面向下),并且设备面朝上(这是正确的).

我的应用程序正确调整自己,并显示在一边,这是完全错误的.

我该怎么做才能知道上一个已知的方向,主屏幕和iPad上的其他用户界面显示的方向?

这是一个只有窗口和视图的OpenGL应用程序.我已经在混合中添加了一个UIViewController来查看它是否提供了更准确的信息,但它只是相同而且错误.我知道我并不是唯一一个在这方面苦苦挣扎的开发者,因为我在iPad上的许多应用程序也做错了,你必须倾斜设备才能使它们正确定位.但有些应用确实似乎对了,秘诀是什么?

launch ipad device-orientation

8
推荐指数
1
解决办法
2656
查看次数

在Javascript中测试iPhone 3GS的设备定位事件的硬件支持

我正在尝试在Javascript中使用HTML5 deviceOrientation事件来在用户围绕他旋转iPhone时旋转图像.

我使用此代码来检测陀螺仪何时移动:

window.addEventListener('deviceorientation', function (e) {
    alpha = e.alpha;
    beta = e.beta;
    gamma = e.gamma;            
}, true);
Run Code Online (Sandbox Code Playgroud)

它在iPhone 4+和iPad 2上运行良好,但3GS(以及较旧的iPhone)上没有陀螺仪.这就是我正在测试deviceOrientationSupport的原因:

if(window.DeviceOrientationEvent){ // gyroscope support
    alert('DeviceOrientationEvent support OK');
} else {
    alert('DeviceOrientationEvent support KO');
}
Run Code Online (Sandbox Code Playgroud)

我在很多网站或论坛上都看过这个代码,但我的问题是在IOS 5.0.1下用我的iPhone 3GS,这个测试表明我:deviceOrientationSupport OK!

我认为这个测试只检查Safari是否能够处理这些事件:(

所以我的问题是,是否可以添加测试以了解硬件是否可以触发定向事件?

谢谢 !

javascript iphone html5 device-orientation gyroscope

8
推荐指数
1
解决办法
5477
查看次数

移动方向改变不适用CSS

我正在测试我正在开发的网站并正在使用媒体查询.

当我在浏览器中测试和调整页面大小时,一切都很好.

但是当我在移动设备上测试时,当我改变手机的方向时遇到问题.

如果我在landscape模式下加载页面,则应用正确的CSS.

当我改为时portrait,CSS也是正确的.

但如果我回去landscape,portraitcss类仍在应用.

我正在使用这些元标记

<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
Run Code Online (Sandbox Code Playgroud)

在我的媒体查询中

@media 
only screen and (max-width: 610px),
only screen and (max-width: 610px) and (orientation:landscape) { ... }

@media
only screen and (min-device-width: 240px) and (max-device-width: 520px),
only screen and (min-width: 240px) and (max-width: 520px) { ... } 
Run Code Online (Sandbox Code Playgroud)

我已经提醒设备宽度以确保它没问题,并且在landscape模式下它是598px宽的并且portrait384px

我正在使用Nexus 4(Android 4.3)

一旦我改变方向,怎么没有应用CSS?

编辑: 如果我加载网站portrait,然后更改为landscape,则不应用CSS.就好像一旦达到最小分辨率,就无法回头.

css device-orientation media-queries

8
推荐指数
1
解决办法
2万
查看次数

UIWindow的UIView子视图不会旋转

我加入UIViewUIWindow这不是keyWindow.我想UIView在设备旋转时旋转.窗口上的任何特殊属性或我需要设置的视图?目前视图不是旋转的.

我知道只有应用程序的第一个子视图keyWindow被告知有关设备轮换的事实.作为测试,我将我的观点添加到了第一个子视图中keyWindow.这会导致视图旋转.然而,作为keyWindow第一个子视图的子视图的视图将不适用于各种美学原因.

另一种方法是观察视图中的设备方向变化并自己编写旋转代码.但是,如果可能的话,我想避免编写此代码(在我看来,有一个额外的窗口更干净).

uiview uiwindow device-orientation ios

7
推荐指数
1
解决办法
5690
查看次数

键盘大小由NSNotificationCenter提供

我想在从UISearchBar调用的键盘上添加一个accessoryView.由于UISearchBar没有实现这个属性,我刚刚创建了一个toolBar.根据Apple关于此事的文档,我决定使用通知中心,不仅要知道键盘何时被调用,还要知道键盘的大小,这取决于方向.

我按照文档中的示例进行了操作,在keyboardWasShown方法上,我调用了一个动画,它将在键盘顶部显示工具栏.像这样的东西:

-(void)keyboardWasShown:(NSNotification*)aNotification {

    NSDictionary *info=[aNotification userInfo];
    CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

     NSLog(@"width: %.1f; height: %.1f", keyboardSize.width, keyboardSize.height );

    [self showAccessoryView:keyboardSize.height];
}
Run Code Online (Sandbox Code Playgroud)

并且,在动画上我设置了工具栏的框架,如下所示:

 self.auxiliaryKeyboardBar.frame=CGRectMake(0, self.view.frame.size.height-(44+kbh), self.view.frame.size.width, 44);
Run Code Online (Sandbox Code Playgroud)

其中44是工具栏的静态高度,kbh是从上面的方法传递的keyboard.size.heigth.

我观察到的问题是,userInfo字典给出的键盘大小总是指纵向方向.因此,纵向方向的NSLog是:

width: 320.0; heigth: 216.0,没关系

但当我将方向更改为横向并且我调用键盘时,NSLog如下:

width: 162.0; heigth: 480.0,这使工具栏超出范围.

所以,我在调用动画之前最后添加了一个条件,例如:

if ([self deviceIsPortrait]==YES) {
        [self showAccessoryView:keyboardSize.height];
    }else if ([self deviceIsPortrait]==NO) {
        [self showAccessoryView:keyboardSize.width];
    }
Run Code Online (Sandbox Code Playgroud)

我现在想知道我是否做错了,因为我正在严格遵循Apple的例子以避免依赖键盘高度(作为一个浮点数)而且我最终还是必须添加一个方向条件.

关于这里发生了什么的任何想法?

uikeyboard nsnotificationcenter device-orientation ios

7
推荐指数
1
解决办法
5792
查看次数

当设备面向横向时,隐藏标题栏/通知栏

当我将设备转换为横向时,我希望隐藏标题栏.我已经看到了用于隐藏标题栏的XML选项,以及以下以编程方式执行此操作的示例:

//Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
//Remove notification bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
Run Code Online (Sandbox Code Playgroud)

但我使用的configChanges参数orientationscreenSize,因此不重新创建我的活动时再次定向景观(我这样做是因为某些原因).所以我不能使用上面的方法,因为这些调用之前需要进行setContentView().

那么任何想法?谢谢.

java android titlebar device-orientation

7
推荐指数
3
解决办法
6939
查看次数

Autolayout和设备定位

我正在开发一个应用程序supports portrait and landscape modes.我在用auto layout to arrange my views.因为我一直在阅读很多帖子,并且我已经意识到开发人员通常使用以下方法之一.

1.第一种方法:

UIViewController:updateConstraints根据设备方向实现方法并更新约束.

2.第二种方法:

UIViewController:viewWillLayoutSubviews根据设备方向实现方法并更新约束.

谁能告诉我最好的使用方法是什么?我一直在寻找一种结合自动旋转和自动布局的最佳实践.谢谢.

iphone device-orientation ios auto-rotation autolayout

7
推荐指数
2
解决办法
7147
查看次数

检测设备运动/方向支持?

我正在寻找一种方法来检查设备是否支持DeviceOrientationEvent或DeviceMotionEvent.更确切地说,我不知道该设备是否真的有加速度计.

遗憾的是window.DeviceMotionEvent,并window.ondevicemotion分别window.DeviceOrientationEventwindow.ondeviceorientation存在,虽然设备-的MacBook视网膜-没有加速度计.

我很清楚,如果事件永远不会被触发,事件监视器的回调函数也将永远不会运行.但在我的情况下,我的程序需要知道设备是否有加速度计,因为如果没有加速度计,用户应该收到通知.

不幸的是,这篇文章的答案对我的问题不起作用.

javascript accelerometer event-listener device-orientation devicemotion

7
推荐指数
1
解决办法
1955
查看次数

DeviceOrientationEvent:当 beta 接近/达到 90 度时如何处理疯狂的伽玛?

任何有 DeviceOrientationEvent 经验和手机/平板电脑的人吗?

在带有陀螺仪的设备上运行以下代码片段,我注意到 gamma(沿 y 轴向左/向右旋转)随着 beta 接近 90 度(设备指向正上方)变大且不可预测。我假设这是gimbal-lock

var data, raf, alpha = document.getElementById("alpha"),
  beta = document.getElementById("beta"),
  gamma = document.getElementById("gamma");

window.addEventListener("deviceorientation", processData);
window.addEventListener('click', togglePause);
updateText();

function processData(e) {
  data = e;
}

function updateText() {
  if (data) {
    alpha.textContent = Math.round(data.alpha);
    beta.textContent = Math.round(data.beta);
    gamma.textContent = Math.round(data.gamma);
  }
  raf = requestAnimationFrame(updateText);
}

function togglePause(e) {
  if (raf) {
    cancelAnimationFrame(raf);
    raf = null;
    window.removeEventListener("deviceorientation", processData);
  } else {
    window.addEventListener("deviceorientation", processData);
    raf = requestAnimationFrame(updateText);
  }
}
Run Code Online (Sandbox Code Playgroud)
body …
Run Code Online (Sandbox Code Playgroud)

javascript mobile device-orientation gyroscope

7
推荐指数
1
解决办法
1365
查看次数

如何让DeviceOrientationEvent和DeviceMotionEvent在Safari上运行?

我正在尝试在我的网站上实现DeviceOrientationEvent和DeviceMotionEvent以获得3D效果。但是,该控制台不会记录任何信息,并且显然iOS 13需要用户设置权限才能开始执行此操作。我似乎无法弄清楚如何正确设置它。

我已经做了一些研究,这就是我发现的东西:https : //github.com/w3c/deviceorientation/issues/57#issuecomment-498417027

可悲的是,在线提供的所有其他方法不再可用。

window.addEventListener('deviceorientation', function(event) {
    console.log(event.alpha + ' : ' + event.beta + ' : ' + event.gamma);
});
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

[警告]在请求并授予许可之前,不会触发任何设备运动或定向事件。

javascript safari mobile-safari device-orientation devicemotion

7
推荐指数
3
解决办法
1952
查看次数