UIWebView内嵌带重力感应特性的HTML5网页
很绕的标题。这几天接到的需求,本次客户希望广告的形式有重力感应特性,具体需求其实就和指南针一个样,设备转动图片会对应偏转。由于每次的广告形式都可能不同,所以直接在iOS中用Object-C写不大现实,总不能上个广告就递交一次App审核。最终团队定下来用HTML5做成网页嵌进UIWebView方便一点。
慢慢总结,这一个月内肯定会碰到许多问题。HTML5除了新表单元素外我也没实际接触过这些新特性,这时候必须要高呼Google万岁。
10月17日
DeviceOrientationEvent,iPhone 4支持iPad 1代不支持;DeviceMotionEvent则是两种都支持。问了下对这块比较熟悉的大城小胖,说iPad 1代没有陀螺仪。这会略有些麻烦,DeviceOrientationEvent本身获取到的就是偏转角度值,直接赋值给webkitTransform的rotate即可。而DeviceMotionEvent返回的则是带有重力系数的百分数,需要做处理转化成角度,比如var alpha = Math.round(((eventData.accelerationIncludingGravity.x) / 9.81) *-90);
http://www.html5rocks.com/en/tutorials/device/orientation/devicemotionsample.html 源代码中有注释。
有个问题是,竖屏左右旋转设备对应的角度来源是alpha参数,如果不设置iPad缩屏,由竖屏转到横屏,角度来源变成了beta参数
10月18日
深深的感觉到瘸腿前端诸多不便。前几年做前端时大部分时间写CSS,为赶进度JS需求基本用JQuery插件调参数实现,原生JS没去碰,然后这半年更是没做前端了,发现现在连window绑定多个事件都要翻书了。OOP更是无从谈起。
本打算写个小App调用HTML文件,这样屏幕翻转及是否缩屏直接在系统级控制方便些。没想客户给了张样图希望明天就出个Demo,纯网页就行,只好先放弃App。开了PS一量表盘竟然不是同心圆啊我去⋯⋯算旋转中心点很是纠结了下。
开始和团队成员讨论和App端的接口问题:
- 判断是否禁止屏幕翻转
- 如果不禁止的话,四个方向对应的变量名,纯粹为了扩展考虑,比如四个方向展示四张不同的网页?
- 四方向是否需要单独写四个JS文件模块化操作
- JS和图片是放服务器上由App下载内部传递给HTML,还是直接写进HTML
10月24日
瞎折腾了几天。纪录一些tips,慢慢整理
- iOS里的safari,也需要写CSS Reset,下午的实际经历是至少body标签有默认边距
- onorientationchange事件,在纯粹的HTML网页里通过iOS上的Safari浏览没问题,内嵌到App中会失效!
- 在viewController里的shouldAutorotateToInterfaceOrientation中设置NO,这时候通过[[UIApplication sharedApplication] statusBarOrientation]是否等于UIInterfaceOrientation已经不能正确判断方向,或者说,这时候需要判断的是设备的物理朝向,而不是屏幕方向。