如何在UIButton上回复UIBarButtonItem突出显示的样式

时间:2014-04-07 13:17:09

标签: ios objective-c uibutton uibarbuttonitem

我有UINavigationBarUIBarButtonItem。我必须为左边的第一个设置自定义视图,因为我希望搜索符号中的 x 保持红色。

因此,我在UIButton上创建了initWithCustomView并使用UIBarButtonItem:方法。现在,我想回复UIBarButtonItem(第一张图片)的突出显示状态,即使在UIButton上也会变暗(第二张图片)。

我不想为突出显示的状态创建另一个图像。

想法?

enter image description here enter image description here

2 个答案:

答案 0 :(得分:0)

您可以使用核心图像过滤器来淡化当前图像并使用:

UIImage *normalImage = [UIImage imageNamed:@"yourNormalImage.png"];
UIImage *lighterImage = [self lightenImage:normalImage];


- (UIImage *)lightenImage:(UIImage *)image
{
    CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *inputImage = [[CIImage alloc] initWithImage:image];

    CIFilter *filter= [CIFilter filterWithName:@"CIColorControls"];
    [filter setValue:inputImage forKey:@"inputImage"];
    [filter setValue:@(0.5) //Positive as you want it lighter
              forKey:@"inputBrightness"];

    CGImageRef lighterImageRef =[context createCGImage:filter.outputImage
                                              fromRect:filter.outputImage.extent];

    UIImage *lighterImage = [UIImage imageWithCGImage:lighterImageRef];

    CFRelease(lighterImageRef);
    return lighterImage;

}

答案 1 :(得分:-2)

创建UIButton时,在将其放入UIBarButtonItem之前,您需要为突出显示的状态设置图像。您可能不想这样做,但这是最好的方法。这也很容易。

[button setImage:@"lighterImage" forState:UIControlStateHighlighted];

创建图像的时间不应超过几分钟。