Изменение размера изображения UIBarButtonItem так, чтобы изображение масштабировалось (iOS)

У меня есть кнопка в моем UIToolbar, на которую я назначил изображение, но я бы хотел, чтобы изображение автоматически уменьшалось (изменение размера изображения за пределами приложения снижает его качество).

Я попытался найти решение здесь, которое создает пользовательский imageView, а затем назначает его кнопке. Однако изображение, похоже, не появляется. Здесь мой код:

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];

Ответ 1

Я предполагаю, что добавление пользовательского представления делает то же самое, что и при использовании initWithCustomView: для создания элемента панели. В этом случае документы говорят,

Элемент кнопки панели, созданный этим методом, не вызывает действие метод его цели в ответ на взаимодействие пользователя. Вместо этого Элемент bar button ожидает, что указанный пользовательский вид обрабатывает любого пользователя взаимодействий и обеспечить соответствующий ответ.

Итак, вы должны добавить распознаватель жестов к изображению и установить для него способ действия,

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

Ответ 2

Одна вещь, которую вы могли бы попытаться сделать, - установить вставки изображения. Оба UIButton и UIBarButtonItem поддерживают вставки изображений. Для этого вам не нужно добавлять UIImageView. Просто установите изображение на свою кнопку, а затем установите вставки изображения.

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

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

Это уменьшает размеры изображений на кнопках. Положительные значения уменьшат размер, а отрицательные значения увеличат изображение.

Ответ 3

Я смог добиться этого, выполнив следующие действия:

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))