Per i non-layout automatico storyboard/ONA, il codice va bene. Tra l'altro, è ormai generalmente consigliato che si animano con blocks:
[UIView animateWithDuration:3.0
animations:^{
self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100.0);
}];
Oppure, se si vuole un po 'più di controllo sulle opzioni e simili, è possibile utilizzare:
[UIView animateWithDuration:3.0
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^{
self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100);
}
completion:nil];
Ma il codice dovrebbe funzionare se non stai usando l'autolayout. È solo che la sintassi sopra è preferibile per iOS 4 e versioni successive.
Se stai usando layout automatico, è (a) creare un IBOutlet
per il vincolo di spazio verticale (vedi sotto), e poi (b) si può fare qualcosa di simile:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
static BOOL logoAlreadyMoved = NO; // or have an instance variable
if (!logoAlreadyMoved)
{
logoAlreadyMoved = YES; // set this first, in case this method is called again
self.imageVerticalSpaceConstraint.constant -= 100.0;
[UIView animateWithDuration:3.0 animations:^{
[self.view layoutIfNeeded];
}];
}
}
Per aggiungere un IBOutlet
per un vincolo, basta controllo -Trascinare dal vincolo al vostro .h nel assistente al montaggio:
a proposito, se si sta animando un vincolo, b È sensibile a qualsiasi altro vincolo che potresti aver collegato a tale visualizzazione. Spesso se metti qualcosa proprio sotto l'immagine, avrà il suo vincolo legato all'immagine, quindi dovresti assicurarti di non avere altri controlli con vincoli all'immagine (a meno che tu non voglia che anche loro si spostino) .
Si può dire se si sta utilizzando layout automatico aprendo lo storyboard o NIB e quindi selezionando il file "commissario" (la prima scheda a destra più pannelli, oppure si può tirare premendo opzione + comando + (il numero "1")):
ricordate, se la pianificazione sul sostegno pre-iOS 6, assicurarsi di spegnere "autolayout". L'Autolayout è una funzionalità di iOS 6 e non funzionerà con le versioni precedenti di iOS.
Nel metodo viewDidLoad. Mi dispiace per quello! –
Stai usando l'autolayout? – Rob
Concordato con Rob, dal codice fornito nel tuo esempio questo sembra essere un problema con il layout automatico che intralcia la tua animazione. Se utilizzi il layout automatico, dovrai animare i vincoli invece di impostare esplicitamente il fotogramma. –