2013-09-05 8 views
2

IKImageBrowserView를 사용자 정의하여 IKImageBrowserView의 셀에 NSButton 또는 다른 컨트롤을 추가 할 수 있습니다. 내가 IGBrowserViewCell 클래스를 cutomize하려했지만, 어떻게 얻었는지 NSbutton을 추가하여 IKBrowserViewItem에 표시하도록했다. 여기에 지금까지 시도한 코드가 있습니다. 셀 클래스IKImageBrowserView를 사용자 정의하여 각 항목에 NSButton을 추가하는 방법은 무엇입니까?

- (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; 
} 

이 셀 클래스

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

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

IKImageBrowserCell는 다양한 제어 프레임을 반환하는 방법이 있고 하위 뷰로서 추가 할 수 없다. 항목에 표시 할 수 있도록 NSButton을 할당하는 위치를 얻지 못했습니다. 도와주세요. 나는 이것에 관해 벌써 약 1 일을 낭비했다. 도움이 될만한 의견이 있습니다. 감사합니다.

답변

1

당신은 올바른 방향으로 가고 있습니다. 유형을 확인하고 버튼을 전경 레이어에 추가해야합니다. 기존 프로젝트의 일부 코드는 다음과 같습니다.

- (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에 표시되기 때문에 forground에는 레이어에 버튼을 추가하는 그들의 다른 방법입니다. if (type == IKImageBrowserCellForegroundLayer) { NSButton * btn = [NSButton alloc] initWithFrame : CGRectMake (0, 0, rect.size.width, 30)]; [btn setTitle : @ "버튼"]; [레이어 addSublayer : [btn 레이어]]; /*이 레이어에 버튼 추가 */ } – Surjeet