NSImage的resizableImageWithCapInsets?

时间:2013-02-04 14:32:05

标签: cocoa-touch cocoa

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

AppKit中是否有类似的内容可用于创建tileable NSImage

3 个答案:

答案 0 :(得分:4)

不。 NSImage不包含这样的智能。您必须自己切割,调整大小并重新组合图像。

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

答案 1 :(得分: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

答案 2 :(得分:4)

NSImage在10.10(优胜美地)确实略有改善。 NSImage现在拥有财产:

@property NSEdgeInsets capInsets

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