Я использую раскадровку. У меня есть 2 UIViewControler: view1 и view2. При нажатии любой из 6 кнопок на просмотр1 выполняется segue, и поэтому этот метод называется: prepareForSegue :. Теперь я хотел бы оживить представление1 до того, как он выполнит segue с 6 пользовательскими изображениями, называемыми navExitFrame1, navExitFrame2 ..., а затем покажет анимацию по умолчанию, установленную в раскадровке под Modal> flip horizontal.Выполнение пользовательской анимации с пользовательскими изображениями кадров
EDIT:
Я сейчас, используя этот код:
void (^animationBlock)() = ^{
NSArray *images = @[[UIImage imageNamed:@"navExitFrame1.png"],
[UIImage imageNamed:@"navExitFrame2.png"],
[UIImage imageNamed:@"navExitFrame3.png"],
[UIImage imageNamed:@"navExitFrame4.png"],
[UIImage imageNamed:@"navExitFrame5.png"],
[UIImage imageNamed:@"navExitFrame6.png"]];
UIImage *myimage = [UIImage imageNamed:@"profile.png"];
[profileButton.imageView setImage:myimage];
[self.view bringSubviewToFront:imageView];
imageView.hidden = NO;
NSUInteger imagesCount = [images count];
for(NSUInteger i=0; i<imagesCount; i++) {
[UIView addKeyframeWithRelativeStartTime:i/(CGFloat)imagesCount
relativeDuration:1/(CGFloat)imagesCount
animations:^{
imageView.image = images[i];
}];
}
};
[UIView animateKeyframesWithDuration:1 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeDiscrete animations:animationBlock completion:^(BOOL finished) {
if (sender == feelingsButton) {
NSString *save = @"feelings";
[[NSUserDefaults standardUserDefaults] setObject:save forKey:@"segueID"];
} else if (sender == placesButton) {
NSString *save = @"places";
[[NSUserDefaults standardUserDefaults] setObject:save forKey:@"segueID"];
}else if (sender == peopleButton) {
NSString *save = @"people";
[[NSUserDefaults standardUserDefaults] setObject:save forKey:@"segueID"];
}else if (sender == settingsButton) {
NSString *save = @"settings";
[[NSUserDefaults standardUserDefaults] setObject:save forKey:@"segueID"];
}else if (sender == profileButton) {
NSString *save = @"profile";
[[NSUserDefaults standardUserDefaults] setObject:save forKey:@"segueID"];
}else if (sender == mainWebView || sender == mainWebView.gestureRecognizers) {
NSString *save = @"newsfeed";
[[NSUserDefaults standardUserDefaults] setObject:save forKey:@"segueID"];
}
[self performSegueWithIdentifier:@"ContentVWS" sender:nil];
}];
}
Что происходит здесь является то, что анимация происходит, но в пространстве микросекунды, я попытался изменение значения о продолжительности в
animateKeyframesWithDuration: 1
, но ничего не меняется. Кроме того, после ввода точки останова в цикле for я понимаю, что никакие изображения не отображаются, кроме последнего, но когда я иду на этапах сборки, изображения перечисляются как набор ресурсов для копирования, и имена изображений пишутся правильно, возможно, поэтому в течение столь короткого периода времени. Также возможно значение
UIView animateKeyframesWithDuration:1 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeDiscrete animations:animationBlock completion:^(BOOL finished) {
неверны, я NSloged их завершения, но только переменный я правильно и imagesCount правильно тоже, но когда я делаю я/(CGFloat) imagesCount это, кажется, всегда возвращаюсь 0 по какой-то причине. Это связано с этим?
Как настроить анимацию для использования фреймов. – ge0rges
Я вижу, что вы имеете в виду с анимацией. Использование анимированного изображения не будет работать для вас в этой настройке. Вам нужна анимация ключевого кадра. если вы ориентируетесь только на iOS7, вы можете использовать метод анимации UIView: 'animateKeyframesWithDuration: delay: options: animation: completion:' См. здесь: https://github.com/ShinobiControls/iOS7-day-by- day/blob/master/11-uiview-keyframe-animation/11-uiview-keyframe-animation.md для хорошего учебника – tjboneman
Я использовал этот метод, и я могу видеть изображения, но для одной микросекунды, но я установил продолжительность 1.0 ... – ge0rges