Titanium MobileのiOS用スプラッシュ画像はちゃんとしたpng拡張子を使おう
お前は何を言って(略
Titanium MobileでiOS用のスプラッシュ画像を使うために
gifファイル用意してたんだが、pngしか設定できないようなので、
拡張子をリネームして、下記のファイルを設定した。
Default.png
Default-568h@2x.png
Default@2x.png
iOS Simulatorは指定したインチに沿って、
使用するスプラッシュ画像を選択してくれてたんだけど、
いざ、実機で確認すると「Default-568h」を
使用すべきところを「Default」しか使ってくれず、
そのおかげで、アプリ自体、640 × 960 サイズになって、
上下に黒い部分の領域ができてしまっていて、この解消方法がわからなかった。
解消方法は素直に
gif → png にちゃんと画像変換すれば、設定出来ました。
今考えると、拡張子リネームしただけで、変換できるか!!って言われそうだけど、
寝てなかったから頭が回ってなかったんです。(言い訳)
Titanium Mobileで親Viewにイベント伝搬させない
Titanium SDK:3.2.0
Alloy:1.3.0
親Viewと子Viewに同じClickイベントを設置した時、
デフォルトでは子ViewのClickイベント後、親Viewのclickイベントが発生します。
var parentView = Ti.UI.createView({ height : Ti.UI.FILL, width : Ti.UI.FILL }); parentView.addEventListener('click', function(e){ console.log("parent click!"); }); var childView = Ti.UI.createView({ height : Ti.UI.FILL, width : Ti.UI.FILL }); childView.addEventListener('click', function(e){ console.log("child click!"); }); parentView.add(childView);
click時
child click! parent click!
これを制御するには、bubbleParentプロパティを制御します。
var childView = Ti.UI.createView({ height : Ti.UI.FILL, width : Ti.UI.FILL, bubbleParent : false });
click時
child click!
これで親プロパティのイベントが発生させないようにできます。
Titanium MobileでBase64でエンコードされた画像を表示。(Android/iPhone)
Titanium SDK:3.2.0
Alloy:1.3.0
サーバーからBase64でエンコードされた画像データを表示したかったのだが、
AndroidとiPhoneでハマったので、メモ。
// 画像取得先のURL(仮のもの) var url = "http://hogehoge.com/getImage"; var xhr = Ti.Network.createHTTPClient({ onload : function(e) { // レスポンスは{"img_string" : "Base64でエンコードされた文字列"}で返ってくるものとする。 var response = JSON.parse(this.responseText); var img = Ti.UI.createImageView({ image : Ti.Utils.base64decode(response["img_string"]), width : Ti.UI.FILL }); // 以下、imgを画面に表示する処理を書く。 }, onerror : function(e) { // 失敗した時の処理 }, timeout : 3000 // 3秒経過したら、タイムアウト }); xhr.open("GET", url); xhr.send();
ここで注意したいのは、最初、createViewのbackgroundImageで
表示しようと思ってたのだが、何故かandroidでは表示できなかった。
Ti.UI.createView({ backgroundImage : Ti.Utils.base64decode(response["img_string"]), width : Ti.UI.FILL });
仕方ないので、createImageViewでやったら、AndroidとiPhoneの両方で
うまくいったので参考までに。
[追記]
・ImageVIewのimage
http://docs.appcelerator.com/titanium/3.0/#!/api/Titanium.UI.ImageView-property-image
・ViewのbackgroundImage
http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.UI.View-property-backgroundImage
ちゃんと、使用できる型決まってるわ。
リファレンスはしっかり見ないと(反省)
Titanium MobileにてBackボタンを無効化する。(Android/iOS)
Titanium SDK:3.2.0
Alloy:1.3.0
両OSでBackを無効化したかったので調べた。
色んな所で使用したかったため、グローバル関数にしてみた。
・alloy.js
Alloy.Globals.disableBack = function(windowObj) { if (OS_IOS) { // iOSはナビゲーションバーを使用している前提。 windowObj.leftNavButton = Ti.UI.createLabel({ text : ' ' }); } else if (OS_ANDROID) { windowObj.addEventListener('android:back', function() { // 何もしない。 }); } };
・index.js
Alloy.Globals.disableBack($.index) // windowオブジェクトを引数にする。
これで、動きました。
Titanium Mobile でOSのバージョンを取得する。(iOS/Android)
Titanium SDK:3.2.0
Alloy:1.3.0
Android 2.3.3で試す場合
gist8799810
OSのバージョンは「4.0.4」とか「2.3.3」と言った表記なので、
そのまま数値にすると「NaN」になってしまう。
したがって、「4.0」や「2.3」などに整形する必要がある。