在UIKit
我们有- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
.
AppKit
创建 tileable是否有类似的东西NSImage
?
在UIKit
我们有- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
.
AppKit
创建 tileable是否有类似的东西NSImage
?
NSImage 在 10.10 (Yosemite) 中确实得到了轻微的改进。NSImage 现在具有以下属性:
@property NSEdgeInsets capInsets
使用此属性,您可以像在 iOS 中一样设置 cap insets。如果您调用[image drawInRect:rect]
,它将考虑这些插图。请注意,这仅适用于运行 10.10 或更高版本的系统;在较旧的系统上,它只会拉伸图像。
没有。NSImage 不包含这样的智能。您将不得不自己切碎、调整大小并重新组合图像。
您可能会考虑创建一个实现此功能的 NSCustomImageRep 子类,然后您可以使用它来实现相同方法的 OS X 版本。
您可以使用 [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