1

NSAffineTransformを適用すると、回転してNSRectに変換されますが、どのサブビューも変換の影響を受けません。以下のコードを含めました。

- (void)drawRect:(NSRect)dirtyRect
    {

        NSAffineTransform * transform = [NSAffineTransform transform];
        [transform translateXBy:13.0 yBy:3.0];
        [transform rotateByDegrees:-45];
        [transform translateXBy:-13.0 yBy:3.0];
        [transform concat];


        NSImageView *imageViewWatchPointer;
        NSRect watchPointer = NSMakeRect(0, 0, 134, 49);
        imageViewWatchPointer = [[NSImageView alloc] initWithFrame:watchPointer];
        [imageViewWatchPointer setImageScaling:NSScaleNone];
        [imageViewWatchPointer setImage:[NSImage imageNamed:@"mastery_watch_pointer"]];
        [self addSubview:imageViewWatchPointer];

        [[NSColor blueColor] set];
        NSRectFill(watchPointer);  

    }
4

1 に答える 1

3

あなたは何にも応募transformしていません。あなたはそれを作成し、それを捨てています。いずれの場合も、にサブビューを追加することはありませんdrawRect:drawRect:ビュー階層を管理するためではなく、現在のビューをカスタム描画するためのものです。NSImageViewこれを行った方法では、メインビューが再描画されるたびに新しいものを追加しています。

ココアの描画がどのように機能するかを理解するために、ココアの描画ガイドに戻ることをお勧めします。

あなたのコードを見て、私はあなたがdrawRect:まったく必要とは思わない。awakeFromNibおそらくまたはにサブビューを追加したいだけですinitWithFrame:。ビューを回転させたいと思います。これを行う最も簡単な方法は、バッキングレイヤー(setWantsLayer:)をaffineTransform付けてから、レイヤーにを設定することです。

または、でdrawRect:、コンテキストを回転させて、画像自体を描画することもできます(を使用せずにNSImageView)。カスタム描画の方法の詳細については、Cocoa描画ガイドを参照してください。

于 2013-02-07T18:02:20.957 に答える