Я намагаюся перенести UIView програмно, використовуючи такий метод:
-(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);
}
Коли метод викликаний, NSLogs показують цезмінна currentBeat збільшується як слід, і кадр playbackLine (мій UIView), здається, рухається як слід. Однак об'єкт на екрані не рухається. Я також спробував встановити межі та центр замість кадру, і всі вони мають схожі результати. Я також спробував використати анімацію замість того, щоб встановити кадр, безрезультатно .
Чи є ще щось, що я повинен робити, щоб зображення на екрані відображало мінливий кадр?
Відповіді:
1 для відповіді № 1Я здогадуюсь, що ви викликаєте цей метод у циклі? iOS не збирається перемальовувати екран, поки ваш код не закінчиться виконуватися. Ви не можете зациклюватись так і побачити ітераційні результати.
Для анімації переглядів слід скористатися рідною підтримкою, яку надає UIKit. Зокрема, перевірити розділ "Анімація" у довідці класу UIView.
1 для відповіді № 2
Спробуйте це
[UIView animateWithDuration:0.3
delay:0.0
options: UIViewAnimationCurveEaseOut
animations:^{
datePickerView.frame = imageFrame;
}
completion:^(BOOL finished){
self.datePickerViewFlag = NO;
}];