Dla non-autoLayout storyboardy/stalówki, kod jest w porządku. Nawiasem mówiąc, to generalnie zaleca się, aby animować za pomocą blocks:
[UIView animateWithDuration:3.0
animations:^{
self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100.0);
}];
Albo, jeśli chcesz trochę większą kontrolę nad opcjami i tym podobne, można użyć:
[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];
Ale kod powinien działać, jeśli nie używasz autolayout. Po prostu powyższa składnia jest preferowana w systemie iOS 4 i nowszych wersjach.
Jeśli używasz autolayout, to (a) utworzyć IBOutlet
do ograniczenia przestrzeni pionowej (patrz poniżej), a następnie (b) można zrobić coś takiego:
- (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];
}];
}
}
Aby dodać IBOutlet
za ograniczenie, tylko kontroli -Przeciągnij z ograniczeniem do swojej ncurses.h w asystent montażysty:

Nawiasem mówiąc, jeśli jesteś animowanie ograniczenie, b Jest wrażliwy na wszelkie inne ograniczenia, które mógłbyś powiązać z tym widokiem. Często, jeśli umieścisz coś tuż pod obrazem, będzie ono wiązało się z obrazem, więc możesz mieć pewność, że nie masz żadnych innych elementów sterujących z ograniczeniami do twojego obrazu (chyba, że chcesz je również przenieść) .
Można powiedzieć, jeśli używasz autolayout otwierając storyboard lub NIB, a następnie wybierając „plik inspektora” (pierwsza zakładka po prawej większości panelu, czy można pociągnąć go naciskając opcję + komenda + (cyfra "1")):

Pamiętaj, jeśli planuje się na wspieraniu wstępną iOS 6, należy wyłączyć "autoLayout". Autolayout jest funkcją iOS 6 i nie działa w starszych wersjach systemu iOS.
W metodzie viewDidLoad. Przepraszam za to! –
Czy używasz autolayout? – Rob
Zgodnie z Robem, z kodu podanego w przykładzie wydaje się, że problem z automatycznym układem utrudnia wyświetlanie animacji. Jeśli używasz automatycznego układu, będziesz musiał animować wiązania zamiast jawnie ustawiać ramkę. –