あひるの勉強部屋

つらつらつら~と不定期にカキコするブログ

OnsenUIのhammer.jsでつまずいた

OnsenUIでhammer.js使ってて、少し手こずったので覚え書き。

右にスワイプして前の画面に戻るといったことをしたくて、ons-gesture-detectorを使いました。(下記URL参照)

http://ja.onsen.io/guide/components.html#ons-gesture-detector

http://ja.onsen.io/guide/overview.html#DetectingFingerGestures

ページのどの部分でスワイプしても反応してほしかったので、以下のように書きました。

<ons-gesture-detector ng-swiperight="ons.navigator.popPage()">
  <ons-page ng-controller="hogeController">
<ons-toolbar>

</ons-toolbar>
</ons-page>
<ons-gesture-detector>

 ここからが本題。

これでうまく動くかと思いきや、完全にはうまくいかなかった。

手元のiOSではうまく動くものの、Android端末ではかなりスワイプの判定がシビアで、最初の方はAndroidでは動いていないと錯覚するほどでした。

 

対処方法は簡単で、コントローラー部(hogeController)に以下のコードを追記するだけ。

.controller('hogeController', function($scope) {
Hammer.gestures.Swipe.defaults.swipeVelocityX = 0.1;

});

これは検出するスワイプの速さの設定です。

Swipe recognizer - Hammer.js

にHammer.jsのスワイプに関する内容が書かれています。

デフォルト値では

VelocityX = 0.65 //OnsenUIでは0.6

となっています。

0.1に下げることで、比較的ゆっくりなスワイプにも反応してくれるようになりました。

また、これを設定することでiOS側の感度が高くなりすぎるといったこともなかったので、ひとまず問題はなさそうです。

 

今日の進捗終わり…

アプリのバージョン比較

iOSのアプリ(Objective-C)で自前でバージョンを管理(更新があるか確認)しなきゃならなかったので、書いてみた。

想定しているバージョンは◯.◯.◯という形式で◯は全て数字であること。

例えば1.10.2と0.11.3を比較して1.10.2の方が新しいよといった感じです。

separateVerStringで.を区切り文字として、3つの番号を配列に格納しています。

次にversionCompareで配列の中身をfor文でint型に変換しつつ、アプリのバージョンと最新のバージョン番号を高位から順に比較し、アプリのバージョンが最新より低ければ0返すようにしています。

0が返されたらviewDidLoaded部でアラートビューを出すようにしているといった作りです。

ツッコミどころがあれば是非お願いします。

 

ではでは良いお年を(☝ ՞ਊ ՞)☝

hostsを書き換えるスクリプト完成

自宅でgitサーバーを運用中であるが、DNSサーバーを建てていないのでサーバーのLAN内に入った時にいちいち

/etc/hosts

を書き換えなければならない。(コメントアウトするか外すか)

例えば

192.168.0.2 example.com

#192.168.0.2 example.com

にするためだけに、

sudo vim /etc/hosts

として書き換えるのは阿呆らしい。

かといって稼働中でバリバリ使用中のサーバーサイドをいじりたくなかったので、hostsファイルを半自動で書き換えてしまえと思いました。

以下シェルスクリプト(OSX用)

#!/bin/sh
var=`sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I|grep "\sSSID"|sed -e "s/[^:]*: //"`
var2=`cat /etc/hosts|grep "example"`

if [ -z ${var} ]; then	#
	echo "Please turn on Wifi or connect to the Wifi spot!"
	exit 1
elif [ ${var} = "your_SSID" ]; then
	echo ${var2} | grep '#'
	if [ $? -eq 0]; then
	#if [ !`echo ${var2} | grep -q '#'` ]; then
		sed -i -e '/example/s/^#//' /etc/hosts
	fi
else
	echo ${var2} | grep -q '#'
	if [ $? -eq 0 ]; then
	#if [ `echo ${var2} | grep -q '#'` ]; then
		echo "already have #"
	else
		echo "add # on the beginning"
		sed -i -e '/example/s/^/#/' /etc/hosts
	fi
fi
exit $?

Githubにもソースをあげているのでご自由にどうぞNa0ki/hosts_rename_script · GitHub

上から順に雑に説明します。

sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I

で以下の情報が得られます。(値は適当に変えてあります)

     agrCtlRSSI: -57
     agrExtRSSI: 0
    agrCtlNoise: -95
    agrExtNoise: 0
          state: running
        op mode: station 
     lastTxRate: 300
        maxRate: 300
lastAssocStatus: 0
    802.11 auth: open
      link auth: wpa2-psk
          BSSID: 0:0:00:00:00:00
           SSID: your_SSID
            MCS: 15
        channel: 44,1

ここからSSIDの行grepしてsedで整形してあげれば、SSIDを取得できます。(varの中身)

次にexample.comのある行を取得したいのでexampleでgrepをかけています。

最初のifではwifiが接続されていない場合を想定しています。wifiが接続されていない場合はNULLが返ってくるため

[ -z ${var} ]

でNULLの場合の処理に持って行っています。

次のifはサーバーと同一LAN内にいる場合の処理を書いています。

sedexample.comの行頭のコメントアウトを外しています。

最後はサーバーのLAN外にいるときはコメントアウトするように処理しています。

以上です。

 

シェルスクリプトを普段書かないので書式に随分と苦しめられました。

助けてくれた友人に感謝。

OSXではlaunchdでスクリプトをバックグラウンドで動かせるらしいので、このスクリプトを動かせるようにlaunchdの勉強中です(☝  ՞ਊ ՞)☝

ではでは

 

Is Initial View Controller

一番最初のビューについてる矢印をうっかり消してしまい、そういやどうやってつけるんだっけと思ったので覚え書き。

 

最初にもってきたいView Controllerを選択した状態で右側のUtilitiesにあるAttributes inspectorを開き、Is Initial View Controllerにチェックをいれて終わり。

 

友人に聞くまで知らんかった。

XPeria Z3にかえた

f:id:ahiruZ:20141125200439j:plain

XPeria UL(SOL22)からXPeria Z3(SOL26)にかえました。

 

ハード的にはULで満足していたのですが、OSの公式アップデートがAndroid4.2で止まっていたため、グローバルモデルのZシリーズに変更しました。

ULが5インチに対してZ3が5.2インチで画面が若干大きくなりました。片手で操作するぶんには困らないサイズです。

本体の縦のサイズはZ3がULより大きく、厚さはZ3の方が薄いです。

Z1などは角がカクカクしていて持ちにくかったのですが、Z3は角が丸くなっているので比較的持ちやすいです。ただULと比較するとULの方が圧倒的に持ちやすかったです。

ソフトウェア面ではZ3はAndroid4.4.4です。

5.0がすでにアナウンスされているので、しばらくしたらアップデートが降ってくると思います。

今のところ改善してほしいと思っているのはアイコンサイズです。やたらとデカイのでせっかくの5インチFHDが台無しです。

しかし、これでやっとAndroidの最新を追いつつ開発ができそうなのでとても嬉しいです。

OSC東京に行ってきた

10/18~19と明星大学で行われたOSC東京Fallに参加しました。

今回はぐるぐるのお手伝いとかしたくて前日の金曜日に東京入り。

スタッフの方の後ろをちょろちょろとついていました(もっと働け

いつもこんなに大変なことをしていたのかとびっくりしました。

OSC東京は今回で3回目ですが、これまでは一般参加でぐるぐるなどはしていませんでした。

ただただいろんなブースを見て回っていただけでした。

一般参加として特に困ることなく楽しめるのは裏方でしっかりと準備してくれるスタッフさん達あってのことだなぁとしみじみと感じました( ˘ਊ˘)

 

続きを読む