2010-09-08 8 views

Répondre

19

Appel

button.transform = CGAffineTransformMakeScale(1.1,1.1); 

Dans le bouton pressé gestionnaire.

Ou si vous voulez à l'échelle avec l'animation:

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

cool et comment puis-je combiner bien cela avec un événement tactile? – Tronic

+0

désolé, ne comprends pas ce que vous voulez dire exactement ... – Vladimir

+0

je veux dire, comment je peux combiner ce code avec l'événement, en appuyant sur un bouton. – Tronic

15

Pour compléter la réponse, la mise à l'échelle du bouton (et remise à zéro) peuvent être placés dans des méthodes comme ceci:

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

et connecté les événements de la touche comme ceci:

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

Note1: La définition des valeurs CGAffineTransformMakeScale sur 1.0 ne les conserve pas à leurs valeurs modifiées (c'est-à-dire qu'il ne multiplie pas 1.1 par 1.0), mais les restitue à l'échelle d'origine de l'objet. N'oubliez pas les deux points : dans le sélecteur, car cela permet le passage de l'expéditeur en tant que paramètre à la méthode de réception. Dans ce cas, nos méthodes reçoivent un UIButton et sont déclarées comme telles dans l'interface (fichier .h).

+4

N'oubliez pas 'UIControlEventTouchCancel' et' UIControlEventTouchDragExit' – Tim

+0

super.Merci beaucoup..Son parfait –

2

C'est ce que j'utilise

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

Solution simple, merci, a trouvé un petit problème: Lorsque l'animation autoreverse est terminée, le bouton redimensionne soudainement de 1.5x à 1x. Peut être évité avec une légère modification, a affiché le code complet séparément. – Thiru

2

code modifié légèrement de celui de @ ibm123 qui évite question de modification de taille soudaine.

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

}

0

Swift:

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