0

SettingsViewerという名前の分類されたNSViewの右上隅に160x160の円を描きたいと思います。私はこのドローイングビジネスにかなり慣れていないことを認めなければなりません;(以前にいくつかのドローイングを行ったことがありますが、それは現在行っているものとは完全に異なりますが、今回はもっと複雑です。

SettingsViewerをIBOutletSettingsViewer*myViewにリンクしました。私のSettingsViewer.hで、テスト用のボタンを使用してこの円を描画します。

私が最初に行うことは、次のようにビューエリアの境界を見つけることです。

NSRect circleBounds = myView->_frame;

それは私が前にしたことであり、それはうまくいきました。しかし、ここで、幅の正しい値と高さの奇妙な値を取得します。

デバッガー情報 高さは407にする必要があります。

私がこの間違った値を得た理由の手がかりはありますか?

ロナルド・ホフマン

4

2 に答える 2

1

あなたはオーバーライドすることができます-drawRect:

-(void)drawRect:(NSRect)rect
{
    CGRect bounds = self.bounds ;
    NSBezierPath * path = [ NSBezierPath bezierPathWithOvalInRect:(NSRect){ 
        { CGRectGetMaxX( bounds ) - 160.0f, CGRectGetMaxY( bounds ) - 160.0f }
        , { 160.0f, 160.0f } 
    } ] ;
    [ path stroke ] ;
}
于 2012-11-17T05:17:39.550 に答える
1

IBActionで使用すると、なぜこれが機能しないのですか?

有効な描画コンテキストがあることがわかっているのは、drawRectメソッドだけだからです。IBActionがビューを更新する必要がある場合は、[theView setNeedsDisplay:YES]を使用する必要があります。

于 2012-11-17T07:13:55.927 に答える