viewController中设置禁止屏幕自动翻转的话,有没办法在转屏时获取屏幕方向?

2011-10-21 01:53:23 +08:00
 fordragon
需求中遇到了这个问题,我需要设置一个界面只以横屏模式出现,但是却需要每次转动设备时得到设备的当前屏幕方向参数来做处理。

被折腾了很久,求指点⋯⋯
7785 次点击
所在节点    iDev
15 条回复
fmfsaisai
2011-10-21 02:05:28 +08:00
UIInterfaceOrientation interfaceOrietation = [[UIApplication sharedApplication] statusBarOrientation];
fordragon
2011-10-21 02:14:29 +08:00
@fmfsaisai 木用
我需要把单单这个视图直接锁屏仅以横屏呈现
shouldAutorotateToInterfaceOrientation已经定义过
return UIInterfaceOrientationIsLandscape(interfaceOrientation);

这时候nslog出来的一直是定义好的landscape 我需要的是设备的真实方向⋯⋯
Kai
2011-10-21 02:23:15 +08:00
@fordragon 是要读取的时候强制设备到某个 Orientation ?

或者可以通过当前 super.view.size.width >? super.view.size.height 来判断?
fordragon
2011-10-21 02:35:45 +08:00
@Kai 这个webView先做单屏。html里的判断屏幕翻转的js在webview内部失效,所以我需要从app端获取当前屏幕的状态来传递消息

因为html5里在设备横屏和竖屏情况下判断设备左右旋转的参数不是同一个轴,所以要这么做
fordragon
2011-10-21 02:38:56 +08:00
@Kai 如果像一些游戏一样,固定landscapeLeft,那么我甚至需要从设备端得出orientation的四种状态⋯⋯四种方向的旋转参数都不同,要分别设置 昏了要。
Kai
2011-10-21 02:39:19 +08:00
@fordragon 加载 webView 的 view controller 不可以在 webView 读取数据之前获得 orientation 信息么?
Kai
2011-10-21 02:41:48 +08:00
@fordragon 实在不行在 info.plist 里面规定一个 orientation 吧
fordragon
2011-10-21 02:48:06 +08:00
@Kai 我那个网页demo里有,如果shouldAutorotateToInterfaceOrientation直接return YES的话允许自动翻屏的话。。。

if portrait
alpha;
else if landscapeLeft
beta-90
else if landscapeRight
(-beta)+90
else if portraitupsidedown
-alpha

四种情况...
fordragon
2011-10-21 02:54:37 +08:00
@Kai 载入webView我是做了入屏判断的。入屏时那个orientation直接写死就ok,但是设备-90/+90后哪怕设置画面不转动,依旧需要得到设备方向信息,因为js里的参数是根据物理设备来的

实际上我最郁结的是webApp里正常的玩意丢到webView里要搞这么多花样。
Kai
2011-10-21 02:56:35 +08:00
BB9z
2011-10-21 08:44:12 +08:00
window.onorientationchage = function(){
alert(window.orientation);
}

你Google了吗?
BB9z
2011-10-21 08:47:49 +08:00
SDK编程可以在shouldAutorotateToInterfaceOrientation 里 post 方向变化的 notification,但我不知道怎么能让 webView 里的脚本 observer。
fordragon
2011-10-21 12:43:37 +08:00
@BB9z js里判断onorientationchage我在纯网页端已经写好了,iOS上safari看已经是想要的效果,但是这个网页是要内嵌在app内的,放进去后发现这些代码已经失效⋯⋯
BB9z
2011-10-21 13:26:50 +08:00
@fordragon 额,居然会这样。这方面实在不熟,再给个建议试试:我看文档 UIWebView 有个 stringByEvaluatingJavaScriptFromString 方法,不知道能不能通过这个通知网页方向变化。
或者方向变化时在 url 后面加一个hash参数 比如 http://example/some#hash ,在页面里周期检查这个hash。
暂时就这么多了。
fordragon
2011-10-21 14:01:15 +08:00
@BB9z stringByEvaluatingJavaScriptFromString需要webViewDidFinishLoad才能执行。在尝试这条方案,但是还要试验不同条件下加进去的js,是追加的还是覆盖性的。

说实话我有点开始怀疑这个重力感应的需求是不是用iOS原生的做法更合适orz

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/19917

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX