GMSMapViewの上に自分で作ったUIViewとかを配置する方法
GMSMapViewの上には通常マーカーとかのAPIから提供されてるオブジェクトしか置けない。
しかし、マーカーのとなりに常にインフォウィンドウ的なのを表示させておきたい場合もある。マーカーにはデフォルトでインフォウィンドウがあって、タップして選択すると表示されるが、マップ中のどれか一つのマーカーのインフォウィンドウしか出ない。でも画面内にあるマーカーはどれもインフォウィンドウ開きっぱなしにしたい場合もある。
擬似的にそういう画面を作る方法があったのでメモしておく。
まず、GMSMapView中のマーカーの緯度経度を、画面上の座標に変換する必要がある。変換にはGMSMapViewのプロパティであるところの(GMSProjection *)projectionを用いる。
マーカーのクラスとかに、
CGPoint point = [self.map.projection pointForCoordinate:self.position];
などとおもむろに書き込んで座標を取得する。 しかるのちにUIViewなどの欲しい部品を設定する。
UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(point.x, point.y, 100, 50)]; myView.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 50)]; myLabel.text = @"テスト"; [myView addSubview:myLabel];
これにより幅100、高さ50のインフォウィンドウもどきが設定された。
これをマップビューにaddSubviewすればインフォウィンドウもどきが表示されるはずである。 が、マップを移動したりとか拡大縮小したりするとマーカーの位置とずれる。このインフォウィンドウは画面の座標に貼り付けてあるから当然なのだが、自分の場合は何秒かに一回removeFromSuperviewして再度新しい座標を取得して配置し直すことで擬似的に表現している。あるいはマップビューが止まった時のデリゲートメソッド- mapView:idleAtCameraPosition: を使ってもまあまあ許容範囲という感じだ。
for (int i = 1; i < self.mapView.subviews.count; i++) { [self.mapView.subviews[i] removeFromSuperview]; }
こんな感じでビューを消すと意図した通りになる気がする。int i = 0 から始めるとマップビューまで消えて面白い感じになる。
アルフレッド・ベスターの『虎よ、虎よ!』を読んだ
- 作者: アルフレッド・ベスター,寺田克也,中田耕治
- 出版社/メーカー: 早川書房
- 発売日: 2008/02/22
- メディア: 文庫
- 購入: 21人 クリック: 197回
- この商品を含むブログ (194件) を見る
長大なSSを読んだような気持ちがした。しかも結構クソ的なテイストの。面白くなかったというわけではないのだが。。これが50年代のSFかぁ、と感じた。
GMSMapViewの回転
端末が回転したときにGMSMapViewもそれに合わせてサイズを変えたいと思って色々調べた。
そしたら- willAnimateRotationToInterfaceOrientation:duration: というメソッドが引っかかったのだが、これはiOS8.0以降deprecatedらしく- viewWillTransitionToSize: withTransitionCoordinator: というメソッドを代わりに使うべきなのらしい。
その中にどういう処理を書けば自動でリサイズできるのか色々調べていたら、以下のような記事を見つけた。
http://www.zero4racer.com/blog/988www.zero4racer.com
aroundthedistance.hatenadiary.jp
自分はGMSMapViewをUIViewのサブビューに突っ込んでやればオートレイアウトが効いて回転するかと思ってたらUIViewだけ効いててGMSMapViewはそのままだったので、手動でGMSMapViewのサイズをUIViewと揃えてやろうとしたらなぜか初っ端からずれる。その原因は上記2つの記事にあるように、オートレイアウト後のサイズはViewDidLoadのときには取得できないのであるらしいことによるものだった。
結局、以下のような書き方をした。
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { CGRect new = CGRectMake(0,0,size.width,size.height); self.mapView.frame = new; }
グレッグ・イーガンの『万物理論』を読んだ
最近扁桃腺炎で寝込んでたので、眠れないときに読んだ。
- 作者: グレッグ・イーガン,山岸真
- 出版社/メーカー: 東京創元社
- 発売日: 2004/10/28
- メディア: 文庫
- 購入: 12人 クリック: 167回
- この商品を含むブログ (282件) を見る
『涼宮ハルヒの憂鬱』がラノベじゃなくなったら、という感じの本。「万物理論 ハルヒ」で検索すると似たようなこと思った人が何人もいるようだ。
作中で「無知カルト」と呼ばれる人々が出てきて、その中には科学的な真理を政治的に否定するような人もいるのだが、そんなアホな主張をする奴はさすがに現実にはいないだろうし誇張だろうと思っていたら、実際にそういう人がいたらしい。
Understanding the Present: Science and the Soul of Modern Man
- 作者: Bryan Appleyard
- 出版社/メーカー: Picador
- 発売日: 1992/05/08
- メディア: ハードカバー
- この商品を含むブログを見る
あと、最後のほうでTheory of Everythingがわかってもわからないものがある、それは−−人の心だ! みたいなくだりがあるのだけど、そこだけいきなり素朴になってずっこけた。主人公が全体的にキモくて、いかにもモテなさそうなのがよい。
iOSでGMSmapViewのカメラをアニメーションで移動させる
例えば現在地が移動したらそれに従ってカメラの視点座標も動くようにしたいと思ったら、上記サイトにもあるように幾つか方法があるみたいなのだけど、自分にとっては以下のが一番シンプルかつ期待してた動きをした。
[self.mapView animateToLocation:CLLocationCoordinate2DMake(self.latitude, self.longitude)];
//self.mapViewはGMSMapView、self.latitude及びself.longitudeはCLLocationManagerが取得した現在地
ナビ的な感じの使い方をするとき便利だと思う。
20150707
GoogleMapsのAPIが実機でのみ落ちる問題
iOSのバージョン8.3のまま放置してたのだが、GoogleMapsのAPIを実機でテストすると落ちるようになった。Xcode上ではなんとか動いている。
バージョンが古いせいなのかと思って8.4にした。動いた。これがわからなくて3時間くらい時間使った。
Xcodeでシンタックスハイライトとコード補完が正常に動かなくなってしまったこと
あともう一個今日困ったのが、Xcodeでシンタックスハイライトとコード補完が正常に動かなくなってしまったこと。
こことかみると、
~/Library/Developer/Xcode/DerivedData/ を消せとか、
~/Library/Caches/com.apple.dt.Xcode を消せとか書いてあるのだけど、やってもまるで意味がない。プロジェクトをCleanしてBuildするとか、色んなものを再起動しまくるとかも無意味。
ようやく見つけたのが以下の記事。
これしたら一瞬で治った。本当に助かりました。
そのほかメモ
いつも忘れる。
20150706
自分でDB作る時はなんとなくMySQLを使っていたが、オープンソースであるPSQLを使うことになった。微妙に色々違っている。
http://chopl.in/blog/2013/11/07/how_to_retrieve_tables_and_columns_with_postgres.htmlchopl.in
Emacsでshell使いたくなったらC-zしてfgとかでもいいんだけどバッファーの一つを使って色々見れたりするのは便利だった。
http://dqn.sakusakutto.jp/2013/05/php_require_once_include_once_include_path.htmldqn.sakusakutto.jp
参考になった。
http://www.w3schools.com/json/www.w3schools.com
http://www.w3schools.com/json/json_example.aspwww.w3schools.com
JSONはxmlよりシンプルで自分で作る時には良さそうだけどパースの仕方が違っているので既存のパース用のコードを書き直さないといけないが初心者なのでよく分からない。