2013-09-05 72 views
2

我想定製IKImageBrowserView,以便我可以在IKImageBrowserView的單元格上添加NSButton或其他控件。我試圖cutomize IKBrowserViewCell類,但我沒有得到如何以及在哪裏添加NSbutton,以便它顯示在IKBrowserViewItem上。 這是我迄今嘗試過的代碼。如何自定義IKImageBrowserView爲每個項目添加一個NSButton?

#import "ImageBrowserView.h" 
#import "ImageBrowserCell.h" 

- (IKImageBrowserCell *) newCellForRepresentedItem:(id) cell 
{ 
    return [[ImageBrowserCell alloc] init]; 
} 

在細胞類

- (CALayer *) layerForType:(NSString*) type 
{ 
    CGColorRef color; 

    //retrieve some usefull rects 
    NSRect frame = [self frame]; 
    NSRect imageFrame = [self imageFrame]; 
    NSRect relativeImageFrame = NSMakeRect(imageFrame.origin.x - frame.origin.x, imageFrame.origin.y - frame.origin.y, imageFrame.size.width, imageFrame.size.height); 

// place holder layer 
    if(type == IKImageBrowserCellPlaceHolderLayer){ 
     //create a place holder layer 
     CALayer *layer = [CALayer layer]; 
     layer.frame = CGRectMake(0, 0, frame.size.width, frame.size.height); 

     CALayer *placeHolderLayer = [CALayer layer]; 
     placeHolderLayer.frame = *(CGRect*) &relativeImageFrame; 

     float fillComponents[4] = {1.0, 1.0, 1.0, 0.3}; 
     float strokeComponents[4] = {1.0, 1.0, 1.0, 0.9}; 
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

     //set a background color 
     color = CGColorCreate(colorSpace, fillComponents); 
     [placeHolderLayer setBackgroundColor:color]; 
     CFRelease(color); 

     //set a stroke color 
     color = CGColorCreate(colorSpace, strokeComponents); 
     [placeHolderLayer setBorderColor:color]; 
     CFRelease(color); 

     [placeHolderLayer setBorderWidth:2.0]; 
     [placeHolderLayer setCornerRadius:10]; 
     CFRelease(colorSpace); 

     [layer addSublayer:placeHolderLayer]; 

     return layer; 
    } 
return nil; 
} 

該細胞類有方法返回IKImageBrowserCell的各種控制的幀,並且不允許添加爲子視圖。 我沒有得到我在哪裏分配我的NSButton,以便我可以在項目上顯示。 請幫幫我。我已經浪費了大約1天的時間。 任何幫助都是可觀的。 謝謝

回答

1

你正朝着正確的方向前進。您需要檢查類型並將按鈕添加到Foreground圖層。以下是我現有項目的一些代碼。

- (CALayer *)layerForType:(NSString *)type 
{ 
    if (type == IKImageBrowserCellBackgroundLayer) { 
     CALayer *layer = [CALayer layer]; 
     NSRect rect = [self frame]; 
     layer.frame = rect; 
     _frameBg = rect; 
     CGFloat cellSize = rect.size.height; 

     SSLayerBackground *bgLayer = [SSLayerBackground layer]; 
     [layer addSublayer:bgLayer]; 
     [bgLayer setFrame:rect]; 
     bgLayer.position = NSMakePoint(rect.size.width/2.0, rect.size.height/2.0); 
     [bgLayer setNeedsDisplay]; 

     /* Create background layer here */ 

     return layer; 
    } else if (type == IKImageBrowserCellForegroundLayer) { 
     CALayer *layer = [CALayer layer]; 
     NSRect rect = [self frame]; 
     layer.frame = rect; 
     CGFloat cellSize = rect.size.width; 


     /* Add your buttons to this layer */ 

     return layer; 
    } else if (type == IKImageBrowserCellSelectionLayer) { 
     CALayer *layer = [CALayer layer]; 
     NSRect rect = [self frame]; 
     layer.frame = rect; 
     CGFloat cellSize = rect.size.height; 

     /* Do selection layer stuff here */ 

     return layer; 
    } 
    //return nil; 
    return [super layerForType:type]; 
} 
+0

是他們任何其他的方式來添加按鈕上的地層,因爲當我想在你的代碼中添加按鈕什麼都沒有顯示在IKIMageBrowserItem上。如果(type == IKImageBrowserCellForegroundLayer){ NSButton * btn = [[NSButton alloc] initWithFrame:CGRectMake(0,0,rect.size.width,30)]; [btn setTitle:@「Button」]; [layer addSublayer:[btn layer]]; /*將按鈕添加到此圖層*/ } – Surjeet

相關問題