何が起こっている?
CSVファイルからグラフを描画するアプリを開発しています。
CSVに記載されている数値の縦軸範囲は決まっている(0〜1,023)ので、赤いグラフは割り当てられたビュー内に収まる様になっています。
横軸はデータの数の応じて、NSScrollViewでスクロールできるようにしています。
水色と灰色のグラフはその数値から演算されたもので、結果がマイナスの値になることがあります。
グラフビューの縦軸の値は0〜1,023と決めていて、その範囲を超えるものは見えなくてもいいと言う仕様です。
ところが、このビューをスクロールして見えていない部分を表示すると...
なんと、マイナスの値が下のビューまで侵食していました!
見えているエリアではマイナスの値がクリップされていて、見えていないエリアではマイナスの値が描画されているのです。
clipsToBoundsプロパティを使えば解決
clipToBounds
プロパティをtrue
にすればいいことがわかりました。
例えば、グラフビューのawakeFromNib()
メソッドの中で
clipsToBounds = true
とすれば解決しました。
仕様追加によりマウスドラッグでグラフを上下に動かして、演算されたグラフのクリップされた部分も見えるようにしました。
マウスドラッグした時も、やはり他のビューに侵食していました。
この問題もclipsToBounds
をtrue
にすることで解決しました。
参考になったサイト
こちらのサイトはiOSのUIViewについて記載されていましたが、macOSのNSViewにも同じプロパティがあり、同様に解決できました。