2013-03-07 64 views
0

我想调整标准IKImageBrowserCell突出显示维度的大小。我在stackoverflow here上发现了一个类似的问题(在链接中你可以看到标准的IKImageBrowserCell选择高亮)。更改ImageBrowserCell突出显示维度

我发现了一些苹果示例代码,可以完全定制IKImageBrowserCell以及高亮维度。这些是设置帧

- (NSRect) imageFrame 
{ 
// //get default imageFrame and aspect ratio 
    NSRect imageFrame = [super imageFrame]; 

    if(imageFrame.size.height == 0 || imageFrame.size.width == 0) return NSZeroRect; 

    float aspectRatio = imageFrame.size.width/imageFrame.size.height; 

    // compute the rectangle included in container with a margin of at least 10 pixel at the bottom, 5 pixel at the top and keep a correct aspect ratio 
    NSRect container = [self imageContainerFrame]; 
    container = NSInsetRect(container, 8, 8); 

    if(container.size.height <= 0) return NSZeroRect; 

    float containerAspectRatio = container.size.width/container.size.height; 

    if(containerAspectRatio > aspectRatio){ 
     imageFrame.size.height = container.size.height; 
     imageFrame.origin.y = container.origin.y; 
     imageFrame.size.width = imageFrame.size.height * aspectRatio; 
     imageFrame.origin.x = container.origin.x + (container.size.width - imageFrame.size.width)*0.5; 
    } 
    else{ 
     imageFrame.size.width = container.size.width; 
     imageFrame.origin.x = container.origin.x;  
     imageFrame.size.height = imageFrame.size.width/aspectRatio; 
     imageFrame.origin.y = container.origin.y + container.size.height - imageFrame.size.height; 
    } 

    //round it 
    imageFrame.origin.x = floorf(imageFrame.origin.x); 
    imageFrame.origin.y = floorf(imageFrame.origin.y); 
    imageFrame.size.width = ceilf(imageFrame.size.width); 
    imageFrame.size.height = ceilf(imageFrame.size.height); 

    return imageFrame; 
} 

//--------------------------------------------------------------------------------- 
// imageContainerFrame 
// 
// override the default image container frame 
//--------------------------------------------------------------------------------- 
- (NSRect) imageContainerFrame 
{ 
    NSRect container = [super frame]; 

    //make the image container 15 pixels up 
    container.origin.y += 15; 
    container.size.height -= 15; 

    return container; 
} 

两个overidden方法和这是的生成高亮选择

/* selection layer */ 
if(type == IKImageBrowserCellSelectionLayer){ 

    //create a selection layer 
    CALayer *selectionLayer = [CALayer layer]; 

    selectionLayer.frame = CGRectMake(0, 0, frame.size.height, frame.size.height); 

    float fillComponents[4] = {1.0, 0, 0.5, 0.3}; 
    float strokeComponents[4] = {1.0, 0.0, 0.5, 1}; 

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

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

    [selectionLayer setBorderWidth:2.0]; 
    [selectionLayer setCornerRadius:5]; 

    return selectionLayer; 
} 

这是代码的结果的代码:

enter image description here

正如你所看到的那样,选择的框架被改变了,但我不能按照我的方式修改它。我只是想要突出显示为与图像缩略图相同的尺寸。我试图修改选择代码(selectionLayer.frame = CGRectMake(0, 0, frame.size.height, frame.size.height);),但没有任何反应。任何人都可以帮助我?谢谢!

回答

0

要自行选择框架布局,必须覆盖-[IKImageBrowserCell selectionFrame]


以下是一些您可能要覆盖的方法,如果你想定制的布局IKImageBrowserCell的

- (NSRect) imageContainerFrame; 
- (NSRect) imageFrame; 
- (NSRect) selectionFrame; 
- (NSRect) titleFrame; 
- (NSRect) subtitleFrame; 
- (NSImageAlignment) imageAlignment; 

以下是一些您可能要覆盖的方法,如果你想定制IKImageBrowserCell

- (CGFloat) opacity; 
- (CALayer *) layerForType:(NSString *) type; 
外观