6

UIKit我们有- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets.

AppKit创建 tileable是否有类似的东西NSImage

4

3 回答 3

5

NSImage 在 10.10 (Yosemite) 中确实得到了轻微的改进。NSImage 现在具有以下属性:

@property NSEdgeInsets capInsets

使用此属性,您可以像在 iOS 中一样设置 cap insets。如果您调用[image drawInRect:rect],它将考虑这些插图。请注意,这仅适用于运行 10.10 或更高版本的系统;在较旧的系统上,它只会拉伸图像。

于 2015-10-05T04:38:10.737 回答
4

没有。NSImage 不包含这样的智能。您将不得不自己切碎、调整大小并重新组合图像。

您可能会考虑创建一个实现此功能的 NSCustomImageRep 子类,然后您可以使用它来实现相同方法的 OS X 版本。

于 2013-02-05T01:49:27.437 回答
4

您可以使用 [NSImage drawAtPoint] 来代替,如下所示:

@implementation NSImage (CapInsets)

- (void)drawImageWithLeftCapWidth:(NSInteger)left topCapHeight:(NSInteger)top destRect:(NSRect)dstRect
{
    NSSize imgSize = self.size;
    [self drawAtPoint:dstRect.origin fromRect:NSMakeRect(0, 0, left, top) operation:NSCompositeSourceOver fraction:1];
    [self drawInRect:NSMakeRect(left, 0, dstRect.size.width-2*left, top) fromRect:NSMakeRect(left, 0, imgSize.width-2*left, top) operation:NSCompositeSourceOver fraction:1];
    [self drawAtPoint:NSMakePoint(dstRect.origin.x+dstRect.size.width-left, dstRect.origin.y) fromRect:NSMakeRect(imgSize.width-left, 0, left, top) operation:NSCompositeSourceOver fraction:1]; 
}

@end
于 2013-05-22T09:28:54.287 回答