テキスト領域の高さを求めるには?

テキストの高さを求めるのにsizeThatFits:を使うことへの議論。ごく一部を除く、たいていのケースで大丈夫じゃないか?と岸川さん。あとiPhone5sすごいねという話
2
Hirohito Kato ⌘ @hkato193

UILabelオブジェクトに使う sizeThatFits: に感動した。これがあれば、面倒なテキストの高さ計算って全部済んでしまうのではないかしら。

2014-05-12 15:47:00
akisute/Masashi Ono @akisutesama

@hkato193 あーそれ罠があります。死ぬほど遅いですよ!!

2014-05-12 15:47:27
Hirohito Kato ⌘ @hkato193

@akisutesama なんとー!? ありがとうございます…orz

2014-05-12 15:47:52
akisute/Masashi Ono @akisutesama

@hkato193 とかいきなり言ってもしょうがないと思うので例をあげますが、UITableViewのセルの中に1個SizeThatFitsするUILabelを置くとiPhone 5sでもinstruments上で150msとか食ってheavy stack常連行きになります。

2014-05-12 15:48:20
Hirohito Kato ⌘ @hkato193

@akisutesama そ、そんなに恐ろしいメソッドでしたか…。

2014-05-12 15:49:06
akisute/Masashi Ono @akisutesama

@hkato193 逆に言えば滅多にサイズを動的計算しない箇所であれば使っても良いと思います。それでも注意はした方がいいと思います。内部的にはCTGlyph/Run/Frameの計算をやるので遅いわけです。

2014-05-12 15:49:28
akisute/Masashi Ono @akisutesama

@hkato193 今こいつをどうやって手元のプログラムから除去してやろうかとか思ってます。他のheavy stackは全部倒したんですがこいつだけ数が多くて根っこが深くて。まぁiPhone 5以上の実機だと30FPSぐらいは出てるのでバレてないみたいなんですけど。

2014-05-12 15:50:27
Hirohito Kato ⌘ @hkato193

@akisutesama そうなのですね。古いAPIだから、さぞかしチューニングされているのだろうなとおもってドキュメントを読んでいました。boundingRectWithSize:options:attributes:context:だとそんなことないですよね、たしか。

2014-05-12 15:52:26
Yuichi Fujishige @nakiwo

テキスト高さの計算、何使っても毎度計算してたら遅いんじゃないかと思う

2014-05-12 15:54:48
Hirohito Kato ⌘ @hkato193

@akisutesama およよ、そうなのですね。そのあたりのノウハウはとてもタメになります。コンパイル時に計算させるとか、キャッシュさせるとか、いずれにしても茨の道ですね…

2014-05-12 15:55:43
kishikawa katsumi @k_katsumi

@hkato193 @akisutesama UITableViewCellに乗るくらいのサイズを計算するぶんには、そこまでかかるのはだいぶ特殊ケースじゃないかな。iPhone 5sならたいていの使い方だったらもう2ケタ速いと思う。

2014-05-12 19:03:41
akisute/Masashi Ono @akisutesama

@k_katsumi @hkato193 うそーん。まぁ確かに存在する限りのラベルぜんぶsizeThatFitsしちゃってるからここまで遅いのかもしれんけど。

2014-05-12 19:23:56
kishikawa katsumi @k_katsumi

@akisutesama @hkato193 まあ内容によってそれくらいかかることもあるとは思います。テキストの量やスタイルによって線形にかかる時間は増えていくので。ただ、たいていのケースではそこまで気にしないで使えるはず、、、という。特にiPhone 5sだったら。

2014-05-12 19:25:48
akisute/Masashi Ono @akisutesama

@k_katsumi @hkato193 あー、systemFontじゃなくてHiraKakuPro-W6とか明示指定してるからとかあるのかもしれんなぁ。ひょっとしたら。

2014-05-12 19:26:34
kishikawa katsumi @k_katsumi

@akisutesama @hkato193 ヒラギノか。。。ヒラギノはあれだな。。。ちょっとフォント指定して測ってみる。

2014-05-12 19:27:28
kishikawa katsumi @k_katsumi

@akisutesama @hkato193 僕が試した限りはフォントを指定することによる有意な差は無かった。ただ、システムフォントでもヒラギノでもやたら遅いやつが稀にいるのは確認している。(9割9分が0.001秒なのに0.03秒かかるやつが稀にいる、って感じ)

2014-05-12 19:54:23
akisute/Masashi Ono @akisutesama

@k_katsumi @hkato193 ほへー。調査ありがとうございますo(^▽^)o

2014-05-12 20:02:38
kishikawa katsumi @k_katsumi

@akisutesama @hkato193 まー、あとは個別にケースバイケースなんだろうねー。

2014-05-12 20:03:44
Hirohito Kato ⌘ @hkato193

@k_katsumi @akisutesama うわー、ありがとうございます!<(_ _)>

2014-05-13 08:46:41