iOSのバージョンによってはUIAlertControllerのボタンの並びが変になるかもしれない
古いiOSだとUIAlertControllerにaddActionした順に左から表示されるっぽい。 たまたま古いテスト機で触ってて違和感があって発見。
こんなコードが
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) showDialog() } func showDialog() { let message = "OK,キャンセルの順" // ↓ここのaddActionする順番を逆にしたりすると let alert = UIAlertController(title: "title", message: message, preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)) presentViewController(alert, animated: true, completion: nil) } }
iOS8.4
iOS8.1
iOS8.1だと足した順に左からになってて、8.4だと常にOKが右に来てる。
シミュレータではiOS9.0を動かしてたので、たまたま古いiPhone5でテストしなかったら気づかなかった。
こういうの他にもありそうで怖い。
UIViewのアニメーション中にタップイベントが発生しなくてハマった自戒
起きたこと
- UITableViewをスクロールしてると、たまに指が滑る(縦にスワイプしてもtableViewが追従してこない)ような違和感があった
- 最近、UITableViewのセル内の画像をUIViewの
transitionWithView
を使ってフェードインさせるように改修してた - フェードインが怪しいと思ってdurationを10秒とかにして試してみたら案の定アニメーション中に画像を触ってもなにも反応しなかった
- 直すぞ
- 直らん
やったこと
UIResponder周りかな…?
もともとタッチの判定をUIResponderのtouchesBegan
をオーバーライドしてやってたのでその辺から疑ってかかった。
確かにフェードインのアニメーション中に画像をタップしても、touchesBegan
が呼ばれてない。
じゃーアニメーションしてる間のタップイベントはどこに通知されてるんだと思い子やら親やらいろいろ見たけどどこにも行ってないっぽい。
「こいつがイベントを受け取ってないなら、どっかで受け取ってるビューがいるはず」と思い込んでしまい、そいつを探しはじめてハマってしまった。
transitionWithView
からanimateWithDuration
に変えてみる
結果同じ。
UIResponderじゃなくてUITapGestureRecognizer使ってみる
てっきりUIResponderが悪いと思っていたので、recognizer作ってイベント貼ってやれば通知来るだろうと思ったけど来なかった。これ結構がっくりきた。
UIViewAnimationOptionsのドキュメントもっかい見た
struct UIViewAnimationOptions : OptionSetType { init(rawValue rawValue: UInt) static var LayoutSubviews: UIViewAnimationOptions { get } static var AllowUserInteraction: UIViewAnimationOptions { get } // <- あっ static var BeginFromCurrentState: UIViewAnimationOptions { get } static var Repeat: UIViewAnimationOptions { get } static var Autoreverse: UIViewAnimationOptions { get } static var OverrideInheritedDuration: UIViewAnimationOptions { get } static var OverrideInheritedCurve: UIViewAnimationOptions { get } static var AllowAnimatedContent: UIViewAnimationOptions { get } static var ShowHideTransitionViews: UIViewAnimationOptions { get } static var OverrideInheritedOptions: UIViewAnimationOptions { get } static var CurveEaseInOut: UIViewAnimationOptions { get } static var CurveEaseIn: UIViewAnimationOptions { get } static var CurveEaseOut: UIViewAnimationOptions { get } static var CurveLinear: UIViewAnimationOptions { get } static var TransitionNone: UIViewAnimationOptions { get } static var TransitionFlipFromLeft: UIViewAnimationOptions { get } static var TransitionFlipFromRight: UIViewAnimationOptions { get } static var TransitionCurlUp: UIViewAnimationOptions { get } static var TransitionCurlDown: UIViewAnimationOptions { get } static var TransitionCrossDissolve: UIViewAnimationOptions { get } static var TransitionFlipFromTop: UIViewAnimationOptions { get } static var TransitionFlipFromBottom: UIViewAnimationOptions { get } }
あっ
UIView.transitionWithView(self, duration: 1.0, options: [.TransitionCrossDissolve, .AllowUserInteraction], animations: { () -> Void in self.alpha = 1 }, completion: nil )
これでいけた(.TransitionCrossDissolve
は元から渡してた)
反省
ドキュメントを読みましょう
メソッドにoptionとか渡してたらまずそこを見ましょう
反省します。
さよなら2015年
あんまりテレビが面白く無いのでTwitterの全ツイート履歴を見ながら1年を振り返ってみる。
ちなみに月ごとのツイート数はこんな感じ。
←1月 12月→
1月
初めて自宅にサーバーを置いた。
アニメ録画環境を作った。
ローリングガールズ録画出来てないw
— ひらり (@hiragram) 2015, 1月 25
2月
21歳になったけどTwitterで全く言及してなかった。
仕事の表目標とプライベートの裏目標を立ててたんだけど、どっちも未達のまま22歳になりそう。
3月
Swift書き始めた。
仕事もほとんどPHPからObjective-Cに変わってたと思う。
Swift勉強にTwitterアプリつくってる pic.twitter.com/8DaroaPRmZ
— ひらり (@hiragram) 2015, 3月 26
4月
初めてクラブイベントに行った。
秋葉原のMOGRAに連れて行ってもらった。
どんちゃか pic.twitter.com/vlf2eHfkuD
— ひらり (@hiragram) 2015, 4月 11
5月
初めてデベロッパーカンファレンスみたいなのに参加した。
Twitterの財力にびびった。
#TwitterFlock お姉さんがはさんでくれるどら焼き pic.twitter.com/YcCEFiWdzg
— ひらり (@hiragram) 2015, 5月 19
— ひらり (@hiragram) 2015, 5月 19
最前のリザーブドシートのとなり pic.twitter.com/iyVF8sZ02d
— ひらり (@hiragram) 2015, 5月 19
6月
社員旅行で北海道に行った。
今回は救急搬送されなかった。
水です pic.twitter.com/ERHU0aGop4
— ひらり (@hiragram) 2015, 6月 6
新千歳のクソクソブヒブヒブースきた pic.twitter.com/7VxfgulhVM
— ひらり (@hiragram) 2015, 6月 6
7月
自作のSwift製UIライブラリをGitHubに公開したりした。
はてなブログに投稿しました #はてなブログ
しょぼいライブラリを公開したあとの話 - がはは
http://t.co/djIoNjVybV pic.twitter.com/C7YfGsJY3h
— ひらり (@hiragram) 2015, 7月 30
8月
初めてYAPC::Asiaに参加した。
よろしくな #yapcasia pic.twitter.com/CQoWYyurAz
— ひらり (@hiragram) 2015, 8月 21
9月
一般道で東京から仙台までドライブした。
10時間かかった。
もともとご飯たべる予定で集まったメンバーでいきなり頭悪い旅行をしてしまったけど楽しかった。
一般道で東京から仙台まで来た pic.twitter.com/JN8yymoboa
— ひらり (@hiragram) 2015, 9月 12
10月
デレステのスクショ解析するアプリを作り始めた。
まだ完成してない。
デレステのスコア検出、ようやく位置合わせまでおわった pic.twitter.com/icwvD8vz5e
— ひらり (@hiragram) 2015, 10月 25
11月
ついにCharlotteを見た。はまった。
ここすこ pic.twitter.com/KU6qp3iMb5
— ひらり (@hiragram) 2015, 11月 16
12月
港区から埼玉に引っ越した。
家賃が4万さがった。
これが開始1時間でベッドとデスクだけになった pic.twitter.com/R7fNDGH5SR
— ひらり (@hiragram) 2015, 12月 8
総括
正直上半期の出来事は全然覚えてないというか、記憶に残るような出来事が全然なかった気がする。 エンジニアとしては、初めてライブラリをOSSにしたり、外部の勉強会とかカンファレンスとかに行きまくったりして、インターネットぽいエンジニアにつま先浸かった感じなので、来年はどっぷり浸かれるようにがんばりたい。
2016年の抱負みたいなのも考えてるけど、それは年明けにでもまとめようと思う。
僕の中のすてにゃん
僕とすてにゃん
この記事は、すてにゃん Advent Calendar 5日目 の記事です。すてにゃんまじごめん。
みなさんはすてにゃんを知っていますか?
すてにゃんというのは猫のことなんですが、僕は最初プログラマの人間だと思っていました。
今日は僕の中のすてにゃんの印象の変遷をつらつらと書いていこうと思います。
すてにゃんを知った日
これからのエンジニアとしての自分 - すてにゃんのガチ勢日記
確かこの記事だったと思う。当時はブログの名前が違ったような。
Twitterに流れてきたのをみてたまたま読んで、僕と同い年(か1個違い?)であること、帰国子女っぽいこと、文章を書くのが上手いことなどがわかった。
あと、
開発が終了するのはユーザーが完全に満足したときです
このフレーズが激刺さりしたのを覚えています。
「アメリカに留学してるめっちゃ頭いい人」という印象がこの時形成されました。
Twitterフォローしたのはこの時?あんま覚えてない。
すてにゃんと会った日
すてにゃんとTwitterで繋がって数ヶ月、YAPC::Asia Tokyo 2015が開催され、すてにゃんと初邂逅を果たすチャンスがやってきた。
一番でかいホールで、遠目にすてにゃんの姿を確認。
ぼく「つよそう」
なんだろう。何を喋ったかあまり覚えてないけど、「はてな強い」っていう話をした気がする。気がする。
すてにゃんは背がでかい。
今の僕の中のすてにゃん
すてにゃんははてにゃんで、外から見てもとがった人の多いはてな勢のなかでも一際異彩を放っている感じがします。
個人的にちょろっとScalaに興味がでてきたお年ごろ(主に関数型プログラミングの文脈で)なので、Scalaにゃんにいろいろ教えてもらえたらなと思ってます。
開発が終了するのはユーザーが完全に満足したときです
開発が終了するのはユーザーが完全に満足したときです
開発が終了するのはユーザーが完全に満足したときです
これ強烈すぎん?
超カッコええやんな
なんかアドベントカレンダーめっちゃ遅れたのもあってめっちゃすてにゃんヨイショになってしまった感あるけど堪忍な
ユーザーが満足してどっか行っちゃわないように、常にワクワクを提供できるエンジニアになりたいなあと、自分を振り返り見つめるきっかけになったフレーズでした。
なんか勉強会とかで会う機会あったらまた挨拶したいぞ〜
よろしゅうな〜
近況(8月~)
仕事がいろいろ変わって(not転職)、SwiftでiOSアプリを作り始めました。これまでは既存のObjcなアプリをメンテナンス&機能追加していくような感じでしたが、今度はゼロから全部をひとりで。めちゃめちゃ周りの力を借りながらやってます。
Apple Watch買いました。良いです。1日だけ裸で使ったけど、普段腕時計をしないのでうっかりぶつけまくりでやばいと思ったのでSpigenのGショックみたいなケースを買いました。画面保護フィルムもついてるし現状良いです。
facebook辞めたい。友達かもみたいなところに弟が出てきたし。Twitterの黒歴史クリーナーみたいに過去の投稿をゴリゴリ消すスクリプトを書いたりしたんだけど、どうやら投稿したアプリからじゃないと消せないっぽい。やめて欲しい。
引っ越しを迷っている。今年の年末で部屋が更新になるので、更新するかどうか。もうちょっと都心から離れて、車買いたい。けど今のところ普通に気に入ってる。うーむ。
そんなかんじ。
YAPC::Asia2015のトートバッグに書いてあるコードをいじいじする #yapcasia
どうもどうも。1日に2度ブログを書くのは初めてです。
YAPC::Asia 2015のお土産でみんなもらったトートバッグにPerlのprint文が書いてありますよね?
おみやげの内容については、さっき僕が書いた記事を御覧ください。
YAPC::Asia 2015のお土産を紹介するぞー #yapcasia
YAPCにいる最強のPerlプログラマのみなさんはおそらく実行するまでもなく出力を読み取ることができたんだろうなあと思うんですが、僕はPerl力が無いので得体のしれないコードを無防備に実行してしまいました。すみません。
さて、トートバッグに書いてあったコードはこんな感じです。
print 115.117.112.112.111. 114.116.101.100.32.98. 121.32.76.105.118.101. 115.101.110.115.101.32. 73.110.99.46.10;
これらのピリオドで連結された数字一つ一つがアスキーコードで、それぞれがアルファベット1文字に対応しています。
ほかにも色々試してみた。
#!/usr/bin/perl use strict; use warnings; print 115.117; # -> 115.117 print "\n"; print 115.117.112. 112.111. 114.116.101.100; # -> sup112.111rted print "\n"; print 115 . 117 . 112 . 112 . 111; # -> 115117112112111 print "\n"; print 192.168.0.1; # -> � print "\n";
結合する数字が2つだと小数点、スペースが入ると文字列結合とみなされる。
以下のコードで任意の文字列が表示されるYAPCトートバッグが作れるはずです。
#!/usr/bin/perl use strict; use warnings; my $message = $ARGV[0]; my @ascii = unpack("C*", $message); print "print ". join('.', @ascii). ";\n";
引数に文字列を渡します。
$ perl yapc.pl "にっこにっこにー♪ あなたのハートににこにこにー♪ 笑顔届ける矢澤にこにこー♪ にこにーって覚えてラブにこー♪" print 227.129.171.227.129.163.227.129.147.227.129.171.227.129.163.227.129.147.227.129.171.227.131.188.226.153.170.10.227.129.130.227.129.170.227.129.159.227.129.174.227.131.143.227.131.188.227.131.136.227.129.171.227.129.171.227.129.147.227.129.171.227.129.147.227.129.171.227.131.188.226.153.170.10.231.172.145.233.161.148.229.177.138.227.129.145.227.130.139.231.159.162.230.190.164.227.129.171.227.129.147.227.129.171.227.129.147.227.131.188.226.153.170.10.227.129.171.227.129.147.227.129.171.227.131.188.227.129.163.227.129.166.232.166.154.227.129.136.227.129.166.227.131.169.227.131.150.227.129.171.227.129.147.227.131.188.226.153.170;
確認します。
$ perl -e "print 227.129.171.227.129.163.227.129.147.227.129.171.227.129.163.227.129.147.227.129.171.227.131.188.226.153.170.10.227.129.130.227.129.170.227.129.159.227.129.174.227.131.143.227.131.188.227.131.136.227.129.171.227.129.171.227.129.147.227.129.171.227.129.147.227.129.171.227.131.188.226.153.170.10.231.172.145.233.161.148.229.177.138.227.129.145.227.130.139.231.159.162.230.190.164.227.129.171.227.129.147.227.129.171.227.129.147.227.131.188.226.153.170.10.227.129.171.227.129.147.227.129.171.227.131.188.227.129.163.227.129.166.232.166.154.227.129.136.227.129.166.227.131.169.227.131.150.227.129.171.227.129.147.227.131.188.226.153.170;" にっこにっこにー♪ あなたのハートににこにこにー♪ 笑顔届ける矢澤にこにこー♪ にこにーって覚えてラブにこー♪
これでトートバッグも作り放題です。
Twitterもよろしく
@stefafafan ビッグサイトの入口わかんなくて爆笑してる
— ひらり (@hiragram) 2015, 8月 20
YAPC::Asia 2015のお土産を紹介するぞー #yapcasia
今日前夜祭でした。明日からが本番です。
id:y_uukiさんのブログ論、とてもおもしろかったです。
僕は個人スポンサーチケットで参加したので、スポンサー特典も含めて頂いたノベルティを紹介しますー。
トートバッグ
YAPC::Asiaの缶バッチもついてます。
Perlのprint文がべろべろ書いてある。気になる人は自分で実行してみてください。
追記: 記事書きました YAPC::Asia2015のトートバッグに書いてあるコードをいじいじする #yapcasia
イベントパンフ
と、タイムテーブル。
クリアファイル
ステーションメモリーズ
モバイルファクトリーさん。実はこれ貰ったの2枚め。
pixiv/岸田メル
裏には「お絵かき楽しす」って書いてありました。
アカツキさん
「ゲームには世界を変える力がある」かっこいい
Tシャツ
茶色Tシャツ(一般)
両面プリント。背番号はみんな10です。
赤Tシャツ(個人スポンサー)
鮮やかな赤です。何日目にどっちを着て行こうか迷う。 こちらは背面はプリント無し。
パーカー(個人スポンサー)
着る季節はもう少し先ですが。
シンプルかつキャッチーで素敵です。
タンブラー(個人スポンサー)
アルミ製のタンブラー。YAPC::Asia TOKYO 2015と刻印されていてめっちゃかっこいい。
会社の机に置こう。
ステッカー/企業チラシなど
いろいろ。
ステッカーは他にも。 YYCは予想外でしたよmixiさん。
その他
サイリウム
なんでw
Seesaaさんの手ぬぐい(?)
長い薄い布が入ってたけど手ぬぐいであってるのか
シャノンさんの付箋と@typeのウェットティッシュ。
飴
おいしかったです。
明日からが本編
今日も夜なのにわざわざビッグサイトまで人が集まってすごい熱気でした。
実は今年YAPC初参加で、今年で最後なのが非常に残念ですが、楽しみたいです。
Twitterもよろしく
お台場でリア充がゆりかもめに大量流入してきて悲しい気持ちになってるギーク達 #yapcasia
— ひらり (@hiragram) 2015, 8月 20