16 Stimmen

UIButton-Skala bei Berührung?

Kann mir jemand sagen, wie ich eine UIButton bei Berührung? Die Schaltfläche sollte um etwa 10 % vergrößert werden.

Vielen Dank im Voraus!

22voto

Vladimir Punkte 169002

Rufen Sie an.

button.transform = CGAffineTransformMakeScale(1.1,1.1);

Im Handler für gedrückte Tasten.

Oder wenn Sie mit Animation skalieren wollen:

[UIView beginAnimations:@"ScaleButton" context:NULL];
[UIView setAnimationDuration: 0.5f];
button.transform = CGAffineTransformMakeScale(1.1,1.1);
[UIView commitAnimations];

17voto

Old McStopher Punkte 6175

Um die Antwort zu vervollständigen, kann die Skalierung (und das Zurücksetzen) der Schaltflächen in Methoden wie folgt untergebracht werden:

// 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
}

Und mit den Ereignissen der Schaltfläche wie folgt verbunden:

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

ANMERKUNG1: Wenn die Werte von CGAffineTransformMakeScale auf 1,0 gesetzt werden, bleiben sie nicht auf ihren geänderten Werten (d.h. es wird nicht 1,1 mit 1,0 multipliziert), sondern sie werden auf den ursprünglichen Maßstab des Objekts zurückgesetzt.

ANMERKUNG2: Vergessen Sie den Doppelpunkt nicht : im Selektor, da sie die Übergabe des Absenders als Parameter an die empfangende Methode ermöglicht. In diesem Fall empfangen unsere Methoden eine UIButton und würden als solche in der Schnittstelle (.h-Datei) deklariert werden.

8voto

joliejuly Punkte 1797

Mauersegler 5

Damit es sich mehr wie natives UIButton-Verhalten anfühlt, bevorzuge ich die Verwendung von touchesBegun y touchesEnded Methoden in einer Unterklasse:

class BaseButton: UIButton {
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)
        UIView.animate(withDuration: 0.3) {
            self.transform = CGAffineTransform(scaleX: 1.1, y: 1.1)
            self.titleLabel?.alpha = 0.7
        }
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)
        UIView.animate(withDuration: 0.3) {
            self.transform = .identity
            self.titleLabel?.alpha = 1
        }
    }
}

Verwendung

Machen Sie in Ihrem Storyboard Ihre Schaltflächen einfach zu Erben von BaseButton .

4voto

Thiru Punkte 1332

Leicht geänderter Code aus dem von @ibm123, der das Problem der plötzlichen Größenänderung vermeidet.

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

}

3voto

ibm123 Punkte 1184

Das verwende ich

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X