8年くらい前からずっと NSView などの Cocoa の左下座標系に呪いを吐き続けているのですが。
NSScrollView と NSView を、正常な動作になるように調整するのは難しいのです。
いえ、難しくないのですが、ややこしくって、いったんハマると抜け出しにくい。
「左下座標系はどうよ」と私が文句を言う度に、すべてを分かったつもりになっている方は「数学座標系の方が角度とか考えるのに都合がいいじゃん、紙に座標を書いてみなさいよ」と言うのですが、GUI の微妙な調整を行うコードを書いたこともないのに、そんな綺麗な世界だと勘違いされても、ね。
もっとも文句を言ってても、ここまで引きずられて来た歴史は覆らないとは思うので、 これ以上ハマらないように覚え書きを。
まず、NSScrollView の中に入れる NSView のサブクラスを、「- (BOOL)isFlipped { return YES; }」な状態にする。次に、Interface Builder で、そのサブクラスの Autoresizing の設定をすべて解除する(デフォルトでは左側と上側の束縛が付いているのでそれを外す)。以上。
いつも2つ目の Interface Builder の手順を忘れてハマってる。
左下原点で描画したいのにスクロールビューを使いたい、という場合は、この方法では回避できないけど、少なくとも私はそんなことをやる可能性はゼロなので問題なし。
スクロールビューも関係なく、ウィンドウの親子関係も関係ないのなら、数学座標系でいいですけど。ゲームを作るときにはそんなものは関係ないから、アークタンジェントなどの計算時の角度の把握を簡単にするために、私も左下原点にしてますしね。
ちなみに、画像ブラウザを簡単に作ることができる ImageKit を Apple の人がデモするときに、やはり同じ問題に直面して、口ごもっていました。そりゃあそうだよ、スクロールバーのノブが下から出てきて、ビューが上から消えて行って、明らかにおかしいものw。
1行だけといっても、そのためだけにサブクラスを作ってコードを書くのはおかしいと思うんですけどね。iPhone の UIKit を作ったグループに、Mac 用の Cocoa もぜひ設計し直していただきたい。
コメントを書く