UIB Кнопочная шкала на ощупь? - PullRequest
       40

UIB Кнопочная шкала на ощупь?

8 голосов
/ 08 сентября 2010

Может кто-нибудь сказать мне, как я могу масштабировать UIButton на ощупь?Кнопка должна увеличиться до 10%.

Заранее спасибо!

Ответы [ 5 ]

20 голосов
/ 08 сентября 2010

Вызов

button.transform = CGAffineTransformMakeScale(1.1,1.1);

В обработчике нажатия кнопки.

Или, если вы хотите масштабировать с анимацией:

[UIView beginAnimations:@"ScaleButton" context:NULL];
[UIView setAnimationDuration: 0.5f];
button.transform = CGAffineTransformMakeScale(1.1,1.1);
[UIView commitAnimations];
17 голосов
/ 06 сентября 2011

Чтобы завершить ответ, масштабирование кнопки (и сброс) можно поместить в такие методы, как:

// Scale up on button press
- (void) buttonPress:(UIButton*)button {
    button.transform = CGAffineTransformMakeScale(1.1, 1.1);
    // Do something else
}

// Scale down on button release
- (void) buttonRelease:(UIButton*)button {
    button.transform = CGAffineTransformMakeScale(1.0, 1.0);
    // Do something else
}

И связать с событиями кнопки, например, так:

[btn addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchDown];
[btn addTarget:self action:@selector(buttonRelease:) forControlEvents:UIControlEventTouchUpInside];
[btn addTarget:self action:@selector(buttonRelease:) forControlEvents:UIControlEventTouchUpOutside];

ПРИМЕЧАНИЕ1: Установка значений CGAffineTransformMakeScale равной 1,0 не сохраняет их в их измененных значениях (т. Е. Не умножает 1,1 на 1,0), а скорее возвращает их к исходному масштабу объекта.

ПРИМЕЧАНИЕ2: Не забывайте двоеточие : в селекторе, так как оно позволяет передавать отправителя в качестве параметра в метод приема.В этом случае наши методы получают UIButton и будут объявлены как таковые в интерфейсе (файл .h).

2 голосов
/ 12 февраля 2015

Слегка измененный код из кода @ ibm123, позволяющий избежать внезапной проблемы с изменением размера.

- (IBAction) buttonTapAction:(UIButton *) sender {
[self animatePressedDown:sender duration:0.6 zoom:1.5];

}

- (void)animatePressedDown:(UIButton *) sender duration:(double) t zoom:(double) zoomX {
[UIView animateWithDuration:t delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
    sender.transform = CGAffineTransformMakeScale(zoomX,zoomX);
} completion:^(BOOL finished) {
    [UIView animateWithDuration:t delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
        sender.transform = CGAffineTransformMakeScale(1,1);
    } completion:nil];
}];

}

2 голосов
/ 21 декабря 2014

Это то, что я использую

-(IBAction)heartButtonTapped:(UIButton*)sender {
    [sender setSelected:!sender.isSelected];


    [UIView animateWithDuration:0.6 delay:0.0 options:UIViewAnimationOptionAutoreverse animations:^{
        sender.transform = CGAffineTransformMakeScale(1.5,1.5);
    } completion:^(BOOL finished) {
        sender.transform = CGAffineTransformMakeScale(1,1);
    }];
}
1 голос
/ 01 октября 2017

Свифт:

button.transform = CGAffineTransform.init(scaleX: 1.0, y: 1.0)
...