Изменение размера изображения 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))