2013-02-04 111 views

回答

4

沒有。 NSImage不包含這樣的智慧。您將不得不自己切割,調整大小和重新組裝圖像。

您可能會考慮製作一個NSCustomImageRep子類來實現此目的,然後您可以使用該子類來實現相同方法的OS X版本。

+0

從10.10開始,它可以有一個['capInsets'](https://developer.apple.com/reference/appkit/nsimage/1520012-capinsets)var。它似乎沒有在任何地方使用,但它在那裏。 –

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

NSImage中的確在10.10(優勝美地)得到輕微改善。 NSImage現在有以下屬性:

@property NSEdgeInsets capInsets 

有了這個屬性,你可以像在iOS中一樣設置cap的insets。如果您致電[image drawInRect:rect],它會考慮到這些插頁。請注意,這隻適用於運行10.10或更高版本的系統;在較舊的系統上,它將簡單地拉伸圖像。