macで半角ダッシュ(--)が全角ダッシュ(―)に変換されてしまう呪いを解く
carton install --deployment
打ってくださいみたいな発言で、半角ダッシュが全角になってて、「なんかおかしいんですけど…」みたいになることが社内で頻発してて、なぜかslackのせいにされてるけど、それmacの設定だよ!!
システム環境設定 > キーボード > ユーザ辞書 から、「スマート引用符とスマートダッシュを使用」をOFFにしましょう!
UIWebView の謎のボーダーと白い背景
UIWebView配置したら、バウンスしたときの背景が白かったり、WevViewの下に黒い下線が表示されたりしてなんだろって思ったら、WebView の opaque
を false
にして、Background を ClearColor
にすれば良いだけだった。
ちなみにバウンスもさせたくないよって場合は webView.scrollView.bounces = false
してあげればよい。
android で INSTALL_FAILED_UID_CHANGED が出たら
諦めて出荷時に戻しましょう!
UICollectionViewでSDWebImage使うと同じ画像が表示されてしまうことがある
CollectionViewで図鑑(所持していると画像が見えて、所持していないと?画像が表示される)みたいなのを作るとして、
class HogeCollectionViewCell: UICollectionViewCell { @IBOutlet weak var hogeImageView: UIImageView! func setImage(url: String?) { if url != nil { self.hogeImageView.sd_setImageWithURL(NSURL(string: url)) } else { self.hogeImageView.image = UIImage(named: "empty_hoge") } } }
こんな感じのカスタムセルを作って、 cell.setImage(url)
みたいな感じで画像をセットすると、未所持セルで何故か他の所持セルと同じ画像が表示されてしまう。
どうやら動きをみると、画面外にスクロールすると、どんどん未所持セルが所持セルに置き換わっているようなので、cellのreuseでsdWebImageが悪さしているらしいことが分かる。
なので、以下のように、 prepareForReuse
で sd_cancelCurrentImageLoad
を呼んであげればよさそうだ。
class HogeCollectionViewCell: UICollectionViewCell { @IBOutlet weak var hogeImageView: UIImageView! override func prepareForReuse() { super.prepareForReuse() self.hogeImageView.sd_cancelCurrentImageLoad() } func setImage(url: String?) { if url != nil { self.hogeImageView.sd_setImageWithURL(NSURL(string: url)) } else { self.hogeImageView.image = UIImage(named: "empty_hoge") } } }
なおった。
MapBox iOS SDK 2.0.0 試した
MapBoxっていうOpenStreetMapのデザインをカスタムできるみたいなサービスがあるのでiOS SDKを触ってみた。 触ってて、なんか転がっている情報となんか違うなと思っていたら、ちょうど6日程前に2.0.0がリリースされたっぽい。
使い方
ドキュメントそこそこまとまっているのでちゃんと読めば、サンプル作る程度なら迷わなそう。
- https://www.mapbox.com/ios-sdk/examples/
- 地図表示とピン立てるとこまでならこれ読めばできる
- https://www.mapbox.com/mapbox-studio/#darwin
- このツール使うとデザイン超カスタマイズできる
- https://www.mapbox.com/blog/ios-native/
- 簡単なやつならストーリーボードでちょちょいって表示することもできるっぽい
- https://www.mapbox.com/ios-sdk/api/hierarchy.html
- リファレンス
感想
- Web上でデザインの設定ができるんだけどすごい簡単だし、いろいろな表示が出来て良い
- ただ、アプリ側でどうやって表示するのかようわからんかった
- JSON書いてね!みたいな記述もあれば(しかも書き方/何を変更すればいいのか分からん)
- styleURLにMap ID(mapbox://<user.style>)指定してねみたいな記述もある
こういう感じ
mapView.styleURL = NSURL(string: "asset://styles/light-v7.json") // これはOK mapView.styleURL = NSURL(string: "mapbox://silvers.xxxxxx") // 真っ黒の地図になった
- 地図の移動を検知するほうほうがなさそう?
google mapでいうところのこれ
func mapView(mapView: GMSMapView, didChangeCameraPosition position:GMSCameraPosition) { println("didChangeCameraPosition(): latitude:\(position.target.latitude), longitude:\(position.target.longitude)") } func mapView(mapView: GMSMapView, idleAtCameraPosition position:GMSCameraPosition) { println("idleAtCameraPosition(): latitude:\(position.target.latitude), longitude:\(position.target.longitude)") }
- Mapのピンを独自の画像にすることが可能
- ただしその場合はviewDidAppear後じゃないとクラッシュする…
- [MGLAnnotationImage] does not work · Issue #1872 · mapbox/mapbox-gl-native · GitHub
- ピンの移動は出来ないので、removeAnnotationしてから位置変えてaddAnnotationする必要アリ
まとめ
簡単にカスタマイズされたデザインの地図表示するなら楽そうだなって感じだった。
一方で、地図上で複雑な処理させるならGoogleMapのほうがやりやすい。
Mapbox.js使えばWebでも使えるのでこっちは今すぐ使っても良いなあ!と思った(イベント会場の位置とか、お店の位置とかそういうの示すのに)。
swiftでArrayの範囲外をよんだときにエラーにならずnilを返すextension
swiftのArrayでインデックスの範囲外を指定すると実行時にエラーになってしまう。
let data = [ 1, 2, 3, 4 ] return index < data.count ? data[index] : nil
毎度毎度こんな感じで書くのだるいので、
let data = [ 1, 2, 3, 4 ] return data[safe: index]
でアクセスできるようにする