Próbuję przenieść UIView programowo przy użyciu następującej metody:
-(void)animatePlaybackLine: (int) currentBeat{
CGRect newFrame = CGRectMake(currentBeat*eighthNoteWidth, 0, eighthNoteWidth, 320);
[playbackLine setFrame:newFrame];
NSLog(@"Line animated to %i", currentBeat);
NSLog(@"New frame origin %f", playbackLine.frame.origin.x);
}
Gdy metoda jest wywoływana, NSLogs to pokazujązmienna currentBeat zwiększa się tak, jak powinna, a ramka playbackLine (mój UIView) wydaje się poruszać tak, jak powinna. Jednak obiekt na ekranie się nie porusza. Próbowałem też ustawić granice i środek zamiast ramki i wszystkie z nich mają podobne wyniki. Próbowałem też użyć animacji zamiast ustawiania ramki, ale bezskutecznie .
Czy jest jeszcze coś, co powinienem zrobić, aby obraz na ekranie przedstawiał zmieniającą się ramkę?
Odpowiedzi:
1 dla odpowiedzi № 1Zgaduję, że wywołujesz tę metodę w pętli? iOS nie będzie przerysowywać ekranu, dopóki kod nie zakończy wykonywania. Nie możesz zapętlić się w ten sposób i zobaczyć iteracyjnych wyników.
Aby animować widoki, powinieneś użyć natywnej obsługi, którą zapewnia UIKit. W szczególności sprawdź sekcja Animacje w odwołaniu do klasy UIView.
1 dla odpowiedzi nr 2
Spróbuj tego
[UIView animateWithDuration:0.3
delay:0.0
options: UIViewAnimationCurveEaseOut
animations:^{
datePickerView.frame = imageFrame;
}
completion:^(BOOL finished){
self.datePickerViewFlag = NO;
}];