V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
fordragon
V2EX  ›  iDev

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

  •  
  •   fordragon · 2011-10-21 01:53:23 +08:00 · 7586 次点击
    这是一个创建于 4543 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求中遇到了这个问题,我需要设置一个界面只以横屏模式出现,但是却需要每次转动设备时得到设备的当前屏幕方向参数来做处理。

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

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

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

    因为html5里在设备横屏和竖屏情况下判断设备左右旋转的参数不是同一个轴,所以要这么做
    fordragon
        5
    fordragon  
    OP
       2011-10-21 02:38:56 +08:00
    @Kai 如果像一些游戏一样,固定landscapeLeft,那么我甚至需要从设备端得出orientation的四种状态⋯⋯四种方向的旋转参数都不同,要分别设置 昏了要。
    Kai
        6
    Kai  
    MOD
       2011-10-21 02:39:19 +08:00
    @fordragon 加载 webView 的 view controller 不可以在 webView 读取数据之前获得 orientation 信息么?
    Kai
        7
    Kai  
    MOD
       2011-10-21 02:41:48 +08:00
    @fordragon 实在不行在 info.plist 里面规定一个 orientation 吧
    fordragon
        8
    fordragon  
    OP
       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
        9
    fordragon  
    OP
       2011-10-21 02:54:37 +08:00
    @Kai 载入webView我是做了入屏判断的。入屏时那个orientation直接写死就ok,但是设备-90/+90后哪怕设置画面不转动,依旧需要得到设备方向信息,因为js里的参数是根据物理设备来的

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

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

    说实话我有点开始怀疑这个重力感应的需求是不是用iOS原生的做法更合适orz
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3008 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:05 · PVG 19:05 · LAX 04:05 · JFK 07:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.