私は現在NSView
、ユーザーがグリッドの間隔とグリッドの色を変更できるという考えで、グリッドパターン(基本的には水平線と垂直線のガイド)を描画するを持っています。
グリッドの目的は、オブジェクトを並べるときにユーザーのガイドラインとして機能することです。1つの例外を除いて、すべてが正常に機能します。NSWindow
グリッド間隔が特に小さい場合(たとえば10ピクセル)、サイズ変更ハンドルをドラッグしてサイズを変更します。ドラッグのサイズ変更は本質的に無気力になります。
グリッドの私のdrawRect
コードは次のとおりです。
-(void)drawRect:(NSRect)dirtyRect {
NSRect thisViewSize = [self bounds];
// Set the line color
[[NSColor colorWithDeviceRed:0
green:(255/255.0)
blue:(255/255.0)
alpha:1] set];
// Draw the vertical lines first
NSBezierPath * verticalLinePath = [NSBezierPath bezierPath];
int gridWidth = thisViewSize.size.width;
int gridHeight = thisViewSize.size.height;
int i;
while (i < gridWidth)
{
i = i + [self currentSpacing];
NSPoint startPoint = {i,0};
NSPoint endPoint = {i, gridHeight};
[verticalLinePath setLineWidth:1];
[verticalLinePath moveToPoint:startPoint];
[verticalLinePath lineToPoint:endPoint];
[verticalLinePath stroke];
}
// Draw the horizontal lines
NSBezierPath * horizontalLinePath = [NSBezierPath bezierPath];
i = 0;
while (i < gridHeight)
{
i = i + [self currentSpacing];
NSPoint startPoint = {0,i};
NSPoint endPoint = {gridWidth, i};
[horizontalLinePath setLineWidth:1];
[horizontalLinePath moveToPoint:startPoint];
[horizontalLinePath lineToPoint:endPoint];
[horizontalLinePath stroke];
}
}
これは、グリッドを描画する方法と完全に関係していると思います。また、グリッドをどのように処理するかについての提案を受け入れています。
非効率性がどこにあるのかがわかります。ドラッグサイズ変更は、サイズ変更時にこのビューでNSWindow
常に呼び出してdrawRect
います。グリッドが近いほど、親ウィンドウのピクセルあたりのドラッグ数が多くなります。
ウィンドウのサイズ変更時にビューを非表示にすることを考えていましたが、動的ではありません。遅延やちらつきが感じられないように、ユーザーエクスペリエンスを非常にスムーズにしたいと考えています。
グリッドを描画するためのより良いまたはより効率的な方法について誰かが何かアイデアを持っていますか?
いつものように、すべての助けは非常にありがたいです。