2010-09-08 15 views
8

Qualcuno può dirmi come è possibile ridimensionare un UIButton in tocco? Il pulsante dovrebbe aumentare del 10%.Scala UIButton al tocco?

Grazie in anticipo!

risposta

19

chiamata

button.transform = CGAffineTransformMakeScale(1.1,1.1); 

In tasto premuto gestore.

Oppure, se si vuole scalare con l'animazione:

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

bene fresco e come posso combinare questo con un evento di tocco? – Tronic

+0

scusa, non capisco cosa intendi esattamente ... – Vladimir

+0

Voglio dire, come posso combinare questo codice con l'evento, quando si preme un pulsante. – Tronic

15

Per completare la risposta, il ridimensionamento tasto (e il ripristino) può essere collocato in metodi in questo modo:

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

e collegato con gli eventi del pulsante in questo modo:

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

NOTA 1: L'impostazione dei valori CGAffineTransformMakeScale su 1.0 non li mantiene ai valori modificati (vale a dire, non moltiplica 1.1 per 1.0), ma piuttosto lo riporta alla scala originale dell'oggetto.

NOTA2: Non dimenticare i due punti : nel selettore, in quanto consente il passaggio del mittente come parametro al metodo di ricezione. In questo caso, i nostri metodi ricevono un UIButton e verrebbero dichiarati come tali nell'interfaccia (file .h).

+4

Non dimenticare "UIControlEventTouchCancel' e" UIControlEventTouchDragExit' – Tim

+0

super.Grazie mille..Il perfetto –

2

Questo è quello che uso

-(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

Soluzione semplice, grazie, ho trovato un piccolo problema: quando l'animazione autoreverse è completa, il pulsante si ridimensiona improvvisamente da 1,5x a 1x. Può essere evitato con una leggera modifica, pubblicato il codice completo separatamente. – Thiru

2

codice Leggermente modificato da quello di @ ibm123 che evita improvviso problema di ridimensionamento.

- (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) 
Problemi correlati