如何以编程方式在较小的NSImageView中放置较大的NSImage?

时间:2009-11-07 22:38:29

标签: objective-c cocoa

假设我有一个100x100的NSImage。我还有一个50x50的NSImageView。有没有办法将NSImage放在NSImageView内的坐标处,所以我可以控制它的哪一部分显示?看起来NSImage似乎没有initWithFrame方法...

5 个答案:

答案 0 :(得分:3)

我在我的NSImageView子类中做了这个,就像Andrew建议的那样。

- (void)drawRect:(NSRect)rect
{
    [super drawRect:rect];
    NSRect cropRect = NSMakeRect(x, y, w, h);
    [image drawAtPoint:NSZeroPoint
              fromRect:cropRect
             operation:NSCompositeCopy
              fraction:1];
}

答案 1 :(得分:2)

我不相信,但是通过自己绘制图像来滚动你自己的NSImageView等效物来支持中心/拉伸选项是微不足道的。

答案 2 :(得分:1)

使您的imageview与图像一样大,并将其放在滚动视图中。如果需要,隐藏滚动条。在这种情况下不需要子类化。

答案 3 :(得分:1)

NSImageView有一个方法-setImageAlignment:,可让您控制图像在图像视图中的对齐方式。不幸的是,如果您想要显示与任何NSImageAlignment值不对应的图像部分,您将不得不以编程方式绘制图像。

答案 4 :(得分:0)

取决于您最终的目标是什么,但对我来说,最简单的事情似乎是将您的NSImageView放在NSView(或子类–不必NSScrollView中,因为“ @NSResponder”用户建议,但这也应该工作良好),将其imageScaling设置为NSImageScaleProportionallyUpOrDown,并将其frameSize设置为图像的size。然后,您可以使用NSImageView在上视图中自由移动setFrame:myDesiredFrame。没有子类,没有手动重绘等。