NSScrollView の中で NSView を正常に動作させる

Cocoaに関するヌマタメモ
2008年10月27日 07:44

scroll.png

8年くらい前からずっと NSView などの Cocoa の左下座標系に呪いを吐き続けているのですが。

NSScrollView と NSView を、正常な動作になるように調整するのは難しいのです。
いえ、難しくないのですが、ややこしくって、いったんハマると抜け出しにくい。

「左下座標系はどうよ」と私が文句を言う度に、すべてを分かったつもりになっている方は「数学座標系の方が角度とか考えるのに都合がいいじゃん、紙に座標を書いてみなさいよ」と言うのですが、GUI の微妙な調整を行うコードを書いたこともないのに、そんな綺麗な世界だと勘違いされても、ね。

もっとも文句を言ってても、ここまで引きずられて来た歴史は覆らないとは思うので、 これ以上ハマらないように覚え書きを。

flipped.png

まず、NSScrollView の中に入れる NSView のサブクラスを、「- (BOOL)isFlipped { return YES; }」な状態にする。次に、Interface Builder で、そのサブクラスの Autoresizing の設定をすべて解除する(デフォルトでは左側と上側の束縛が付いているのでそれを外す)。以上。

いつも2つ目の Interface Builder の手順を忘れてハマってる。

左下原点で描画したいのにスクロールビューを使いたい、という場合は、この方法では回避できないけど、少なくとも私はそんなことをやる可能性はゼロなので問題なし。

スクロールビューも関係なく、ウィンドウの親子関係も関係ないのなら、数学座標系でいいですけど。ゲームを作るときにはそんなものは関係ないから、アークタンジェントなどの計算時の角度の把握を簡単にするために、私も左下原点にしてますしね。

ちなみに、画像ブラウザを簡単に作ることができる ImageKit を Apple の人がデモするときに、やはり同じ問題に直面して、口ごもっていました。そりゃあそうだよ、スクロールバーのノブが下から出てきて、ビューが上から消えて行って、明らかにおかしいものw。

1行だけといっても、そのためだけにサブクラスを作ってコードを書くのはおかしいと思うんですけどね。iPhone の UIKit を作ったグループに、Mac 用の Cocoa もぜひ設計し直していただきたい。

コメントを書く


トラックバックはありません。

トラックバックURL: http://numata.designed.jp/mt-tb.cgi/136