2

私はこれに不慣れで、正しい用語がわからないので、正しく質問することすら難しいです。私はいくつかのObjectiveCコーディングを行ったので、UIの操作に関しては、初心者を少し超えています。

これを達成するためのベストプラクティス、つまり正しい方法を知りたいです。

上部にいくつかのボタンがあるウィンドウがあります。その下には、画像またはWebビューを持つ領域があります。これは可変サイズになるので、見栄えを良くするために、後ろの領域に素敵なタイルパターンを付けたいと思います。

私はうまくいくいくつかのことを実験しましたが、すべてが少しハックな感じがします。タイル状の背景を自動的に提供し、その中に他のコントロールを配置できるコントロールはありますか?さらに言えば、その中に他のコントロールを配置できるようなコントロールはありますか?(私はGTKでこれに慣れていますが、Cocoaでは一般的ではないようです)

また、上のボタンに基づいて画像のサイズが変わる可能性があることを考えると、コアアニメーションとそのレイヤーを使用する必要がありますか(私はそれらについて読んだことがありますが、使用していません)?

ここに画像の説明を入力してください

4

2 に答える 2

1

これを行う非常に簡単な方法の1つは、背景ビューにカスタムNSViewサブクラスを使用することです。-drawRect:メソッドで、画像を取得し、ビューの境界を埋めるために繰り返し描画するコードを記述します。これを行うためのアルゴリズムは非常に単純です。左上(または実際には任意のコーナー)から開始し、画像を描画してから、x位置を画像の幅だけインクリメントして、もう一度描画します。x位置がビューの最大x座標を超えたら、yを画像の高さだけインクリメントして次の行を描画し、以下同様にすべてを塗りつぶします。これでうまくいくはずです:

@interface TiledBackgroundView : NSView
@end

@implementation TiledBackgroundView

- (void)drawRect:(NSRect)dirtyRect
{
    NSRect bounds = [self bounds];
    NSImage *image = ...
    NSSize imageSize = [image size];

    //  start at max Y (top) so that resizing the window looks to be anchored at the top left 
    for ( float y = NSHeight(bounds) - imageSize.height; y >= -imageSize.height; y -= imageSize.height ) {
        for ( float x = NSMinX(bounds); x < NSWidth(bounds); x += imageSize.width ) {
            NSRect tileRect = NSMakeRect(x, y, imageSize.width, imageSize.height);
            if ( NSIntersectsRect(tileRect, dirtyRect) ) {
                NSRect destRect = NSIntersectionRect(tileRect, dirtyRect);
                [image drawInRect:destRect
                         fromRect:NSOffsetRect(destRect, -x, -y)
                        operation:NSCompositeSourceOver 
                         fraction:1.0];
            }
        }
    }
}

@end
于 2012-09-20T22:42:58.213 に答える
0

コントロールが自動的に背景を並べて表示することはありません。

s(通常はサブクラス)がすべての描画を行うことを忘れないでくださいNSView。たとえば、その灰色の領域はのサブクラスにNSViewなり、その中に画像を配置できます。

(サブクラスごとに)タイル画像を実際に描画するにはNSView、Madsenの方法を使用できますが、最も便利な方法ではありません。最も簡単な方法は、次のようなものです。

NSColor *patternColor = [NSColor colorWithPatternImage:[NSImage imageNamed:@"imageName"]];
[patternColor setFill];
NSRectFill(rectToDraw);

-drawRect:これは、カスタムビュークラスのメソッドに配置する必要があります。NSColorタイル画像を表すを作成します。スクロール/クリップビューなどのサブクラスになることもあることに注意してください。

私はCoreAnimationにあまり精通していませんが、ビューを操作するのに役立ち、画像を描画するビュー(およびそのビューのみ)に関して見たい方向かもしれません。

于 2012-09-21T03:20:48.480 に答える