gpt4 book ai didi

objective-c - 在 Cocoa 中以平铺图案绘制图像

转载 作者:行者123 更新时间:2023-12-03 16:23:01 26 4
gpt4 key购买 nike

我想在我的 Cocoa mac 应用程序中以简单的平铺图案在 NSView drawRect 中绘制 NSImage。实现此目的的一种方法是简单地编写一个循环,使用 drawInRect:fromRect:operation:fraction: 多次绘制该图像:

有没有更直接的方法?

最佳答案

正如 Kurt 指出的那样,您需要使用图案图像,但它并不那么简单。图案图像使用窗口的原点作为其原点,因此如果您调整窗口大小,图案将会移动。

您需要根据 View 在窗口中的位置来调整当前图形上下文中的图案相位。我在 NSView 上使用这个类别:

@implementation NSView (RKAdditions)
- (void)rk_drawPatternImage:(NSColor*)patternColor inRect:(NSRect)rect
{
[self rk_drawPatternImage:patternColor inBezierPath:[NSBezierPath bezierPathWithRect:rect]];
}

- (void)rk_drawPatternImage:(NSColor*)patternColor inBezierPath:(NSBezierPath*)path
{
[NSGraphicsContext saveGraphicsState];

CGFloat yOffset = NSMaxY([self convertRect:self.bounds toView:nil]);
CGFloat xOffset = NSMinX([self convertRect:self.bounds toView:nil]);
[[NSGraphicsContext currentContext] setPatternPhase:NSMakePoint(xOffset, yOffset)];

[patternColor set];
[path fill];
[NSGraphicsContext restoreGraphicsState];
}

@end

你可以像这样使用它:

-(void) drawRect: (NSRect)dirtyRect
{
[self rk_drawPatternImage:[NSColor colorWithPatternImage:yourImage] inRect:self.bounds];
}

关于objective-c - 在 Cocoa 中以平铺图案绘制图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9356754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com