调整UIBarButtonItem图像视图的大小,以便缩小图像(iOS)

时间:2014-04-21 04:06:09

标签: ios uiimage uibarbuttonitem uitoolbar

我的UIToolbar中有一个按钮,我已经分配了一个图像,但我希望图像能够自动缩小(调整应用程序外部的图像会降低其部分质量)

我尝试了创建自定义imageView的解决方案here,然后将其分配给按钮。但是,图像似乎并没有出现。这是我的代码:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"info.png"]];
    imageView.frame = CGRectMake(0, 0, 35, 35);
    imageView.contentMode = UIViewContentModeScaleAspectFit;
    imageView.userInteractionEnabled = YES;
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:imageView];
    self.tutorial_lbl = barButtonItem;

请注意,如果我注释掉最后两行并使用下面的行代替,则图像会出现,但之后会丢失按钮的操作。

[self.tutorial_lbl setCustomView:imageView];

3 个答案:

答案 0 :(得分:10)

我假设添加自定义视图与使用initWithCustomView时相同:创建条形按钮项。在那种情况下,文档说,

  

此方法创建的条形按钮项不会调用该操作   响应用户交互的目标方法。相反,   bar按钮项目需要指定的自定义视图来处理任何用户   互动并提供适当的回应。

所以,你应该在图像视图中添加一个轻击手势识别器,并为它设置一个动作方法,

- (void)viewDidLoad {
    [super viewDidLoad];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
    imageView.image = [UIImage imageNamed:@"info.png"];
    UITapGestureRecognizer *tapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(barButtonTapped:)];
    [imageView addGestureRecognizer:tapper];
    imageView.userInteractionEnabled = YES;
    [self.tutorial_lbl setCustomView:imageView];
}

-(void)barButtonTapped:(UITapGestureRecognizer *) sender {
    NSLog(@"Tapped");
}

答案 1 :(得分:2)

您可以尝试做的一件事是设置图像插入。 UIButtonUIBarButtonItem都支持图片插入。您无需为此添加UIImageView。只需在按钮上设置图像,然后设置图像插入。

myButton.imageEdgeInsets = UIEdgeInsetsMake(TOP, LEFT, BOTTOM, RIGHT);//UIButton

myBarButtonItem.imageInsets = UIEdgeInsetsMake(TOP, LEFT, BOTTOM, RIGHT);//UIBarButtonItem

这会调整按钮上的图像大小。正值会减小尺寸,而负值会放大图像。

答案 2 :(得分:1)

我能够通过以下方式实现这一目标:

let originalImage = UIImage(named: "SearchIcon")
let scaledIcon = UIImage(CGImage: originalImage!.CGImage!, scale: 5, orientation: originalImage!.imageOrientation)
let rightButton = UIBarButtonItem(image: scaledIcon, style: .Plain, target: self, action: #selector(MeViewController.showSearchUsers))