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!
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!
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];
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.
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
}
}
}
Machen Sie in Ihrem Storyboard Ihre Schaltflächen einfach zu Erben von BaseButton
.
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];
}];
}
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 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.