我知道这个主题在SO上引起了很多关注,但没有一个"解决方案"对我有用.情况如下:
iPad在我的桌面上是平的(面朝上的设备方向),主屏幕是完全可读的,但主页按钮在顶部.所以这有效地显示了"Portrait Up Side Down" 界面方向.
我开始我的应用程序
该应用程序调用beginGeneratingDeviceOrientationNotifications
以确保加速计正在工作,并且方向通知进入.
在启动时,我的应用程序会查询"界面方向"和"设备方向".结果是:
STARTUP ORIENTATION:
INTERFACE ORIENTATION: UIInterfaceOrientationPortrait
DEVICE ORIENTATION: UIDeviceOrientationFaceUp
Run Code Online (Sandbox Code Playgroud)
Apple文档说每个应用程序(界面?)都是纵向开始的,所以这很有意义.设备方向也是正确的,因为这确实是正面朝上的.
发布后,第一个方向通知即将进入:
NOTIFICATION 1:
INTERFACE: UIInterfaceOrientationPortrait
DEVICE: UIDeviceOrientationPortrait
Run Code Online (Sandbox Code Playgroud)
再一次,界面的肖像(这与我期望的相反,主屏幕显示自己向上朝下的方向),该设备也被称为纵向(不是这样,但这是显而易见的一个聪明的方案,以解决当设备面朝上或朝下时如何定位应用程序的内容).
正如许多人提到的那样,另一个(只有一个,而不是两个)方向通知如下:
NOTIFICATION 2:
INTERFACE: UIInterfaceOrientationPortrait
DEVICE: UIDeviceOrientationFaceUp
Run Code Online (Sandbox Code Playgroud)
接口仍然是纵向(而不是正面向下),并且设备面朝上(这是正确的).
我的应用程序正确调整自己,并显示在一边,这是完全错误的.
我该怎么做才能知道上一个已知的方向,主屏幕和iPad上的其他用户界面显示的方向?
这是一个只有窗口和视图的OpenGL应用程序.我已经在混合中添加了一个UIViewController来查看它是否提供了更准确的信息,但它只是相同而且错误.我知道我并不是唯一一个在这方面苦苦挣扎的开发者,因为我在iPad上的许多应用程序也做错了,你必须倾斜设备才能使它们正确定位.但有些应用确实似乎做对了,秘诀是什么?
我正在尝试在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是否能够处理这些事件:(
所以我的问题是,是否可以添加测试以了解硬件是否可以触发定向事件?
谢谢 !
我正在测试我正在开发的网站并正在使用媒体查询.
当我在浏览器中测试和调整页面大小时,一切都很好.
但是当我在移动设备上测试时,当我改变手机的方向时遇到问题.
如果我在landscape
模式下加载页面,则应用正确的CSS.
当我改为时portrait
,CSS也是正确的.
但如果我回去landscape
,portrait
css类仍在应用.
我正在使用这些元标记
<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
宽的并且portrait
是384px
我正在使用Nexus 4(Android 4.3)
一旦我改变方向,怎么没有应用CSS?
编辑:
如果我加载网站portrait
,然后更改为landscape
,则不应用CSS.就好像一旦达到最小分辨率,就无法回头.
我加入UIView
到UIWindow
这不是keyWindow.我想UIView
在设备旋转时旋转.窗口上的任何特殊属性或我需要设置的视图?目前视图不是旋转的.
我知道只有应用程序的第一个子视图keyWindow
被告知有关设备轮换的事实.作为测试,我将我的观点添加到了第一个子视图中keyWindow
.这会导致视图旋转.然而,作为keyWindow
第一个子视图的子视图的视图将不适用于各种美学原因.
另一种方法是观察视图中的设备方向变化并自己编写旋转代码.但是,如果可能的话,我想避免编写此代码(在我看来,有一个额外的窗口更干净).
我想在从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的例子以避免依赖键盘高度(作为一个浮点数)而且我最终还是必须添加一个方向条件.
关于这里发生了什么的任何想法?
当我将设备转换为横向时,我希望隐藏标题栏.我已经看到了用于隐藏标题栏的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
参数orientation
和screenSize
,因此不重新创建我的活动时再次定向景观(我这样做是因为某些原因).所以我不能使用上面的方法,因为这些调用之前需要进行setContentView()
.
那么任何想法?谢谢.
我正在开发一个应用程序supports portrait and landscape modes
.我在用auto layout to arrange my views
.因为我一直在阅读很多帖子,并且我已经意识到开发人员通常使用以下方法之一.
1.第一种方法:
UIViewController:updateConstraints
根据设备方向实现方法并更新约束.
2.第二种方法:
UIViewController:viewWillLayoutSubviews
根据设备方向实现方法并更新约束.
谁能告诉我最好的使用方法是什么?我一直在寻找一种结合自动旋转和自动布局的最佳实践.谢谢.
我正在寻找一种方法来检查设备是否支持DeviceOrientationEvent或DeviceMotionEvent.更确切地说,我不知道该设备是否真的有加速度计.
遗憾的是window.DeviceMotionEvent
,并window.ondevicemotion
分别window.DeviceOrientationEvent
与window.ondeviceorientation
存在,虽然设备-的MacBook视网膜-没有加速度计.
我很清楚,如果事件永远不会被触发,事件监视器的回调函数也将永远不会运行.但在我的情况下,我的程序需要知道设备是否有加速度计,因为如果没有加速度计,用户应该收到通知.
不幸的是,这篇文章的答案对我的问题不起作用.
javascript accelerometer event-listener device-orientation devicemotion
任何有 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)我正在尝试在我的网站上实现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
javascript ×4
ios ×3
devicemotion ×2
gyroscope ×2
iphone ×2
android ×1
autolayout ×1
css ×1
html5 ×1
ipad ×1
java ×1
launch ×1
mobile ×1
safari ×1
titlebar ×1
uikeyboard ×1
uiview ×1
uiwindow ×1