我想调整标准IKImageBrowserCell高亮显示尺寸的大小。我在stackoverflow here上发现了一个类似的问题(在链接中,你可以看到标准的IKImageBrowserCell选项突出显示)。
我找到了一些苹果的示例代码,它们完全定制了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;
}这是生成选择高亮显示的代码
/* 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;
}这是该代码的结果:

正如你所看到的,选择的边框被改变了,但我不能以我不想要的方式修改它。我只是想让高亮显示与图像缩略图的大小相同。我试图修改选择代码(selectionLayer.frame = CGRectMake(0, 0, frame.size.height, frame.size.height);),但什么也没发生。有人能帮我吗?谢谢!
发布于 2013-05-06 02:57:44
要自定义选择框架布局,必须覆盖-[IKImageBrowserCell selectionFrame]
如果您想要自定义IKImageBrowserCell的布局,以下是您可能希望覆盖的方法。
- (NSRect) imageContainerFrame;
- (NSRect) imageFrame;
- (NSRect) selectionFrame;
- (NSRect) titleFrame;
- (NSRect) subtitleFrame;
- (NSImageAlignment) imageAlignment; 如果要自定义IKImageBrowserCell的外观,可能需要覆盖以下方法
- (CGFloat) opacity;
- (CALayer *) layerForType:(NSString *) type;https://stackoverflow.com/questions/15282539
复制相似问题