在UIKit
我们有- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
。
在AppKit
中是否有类似的内容可用于创建tileable NSImage
?
答案 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或更高版本的系统;在较旧的系统上,它只会拉伸图像。