Это мой первый пост о stackoverflow. Я новичок в iOS-разработчике и не владею английским языком, поэтому постараюсь объяснить свою проблему.
Вероятно. lem:
Я добавил два представления в свое окно AppDelegate и хочу переключаться с одного на другое, используя:
UIView transitionFromView:toView:
Первое представление (MainScreenView) имеет свой собственный ViewController
. В файле .xib MainScreenView у меня есть кнопка с действием, которое вызывает метод goShow, реализованный в моем AppDelegate. В этом методе я использую UIView transitionFromView: toView:
для перехода ко второму представлению. Пока все работает нормально.Мое второе представление (scrollview) объявлено программно в моем AppDelegate и содержит множество изображений внутри (picturesViewController), а поверх них - UIPinchGestureRecognizer
.
Я использую распознаватель жестов, чтобы вернуться в свой MainScreenView. Вот где проблема. Когда я щелкаю пальцем по экрану прокрутки, сразу перед анимацией появляется MainScreenView.view
, поэтому анимация переворота выглядит неправильно.
Я использую следующий код:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
mainScreen = [[MainScreenViewController alloc] initWithNibName:@"MainScreenViewController" bundle: [NSBundle mainBundle]];
CGRect frame = self.window.bounds;
int pageCount = 10;
scrollView = [[UIScrollView alloc] initWithFrame:frame];
scrollView.contentSize = CGSizeMake(320*pageCount, 480);
scrollView.pagingEnabled = YES;
scrollView.showsHorizontalScrollIndicator = FALSE;
scrollView.showsVerticalScrollIndicator = FALSE;
scrollView.delegate = self;
[...] 'While' adding pictures to de scrollView
UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain)] autorelease];
[scrollView addGestureRecognizer:twoFingerPinch];
[self.window addSubview: scrollView];
[scrollView setHidden:TRUE];
[self.window addSubview: mainScreen.view];
[self.window makeKeyAndVisible];
return YES;
}
-(void) goShow{
[UIView transitionFromView:mainScreen.view
toView:scrollView
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews
completion:NULL];
[UIView commitAnimations];
}
-(void) goBackToMain {
[UIView transitionFromView:scrollView
toView:mainScreen.view
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews
completion:NULL];
[UIView commitAnimations];
}
Я использую представления «показать / скрыть» вместо addSubview / removeFromSuperView
, потому что я пробовал добавлять и удалять и получил сбой приложения в жесте сжатия, точно на том же этапе, на котором не работает анимация. Возможно, это та же ошибка, но я не могу найти ее причину. Любая помощь будет оценена по достоинству.
Спасибо.
Хорошо. С помощью Адриана вот код UIPinchGesture, решивший мою проблему:
[...]
UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain:)] autorelease];
[scrollView addGestureRecognizer:twoFingerPinch];
-(void)goBackToMain:(UIPinchGestureRecognizer *)recognizer {
if (recognizer.state == UIGestureRecognizerStateEnded)
{
[UIView transitionFromView:scrollView
toView:mainScreen.view
duration:0.4
options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews
completion:nil];
[UIView commitAnimations];
}