Это мой первый пост на stackoverflow. Я новичок в iOS-разработке и не являюсь носителем английского языка, поэтому постараюсь объяснить свою проблему.
Проблема:
Я добавил два вида в окно AppDelegate и хочу переключаться с одного на другое, используя:
UIView transitionFromView:toView:
Первый вид (MainScreenView) имеет собственный ViewController
. В .xib-файле MainScreenView у меня есть кнопка с действием, вызывающим метод goShow, реализованный в моем AppDelegate. В этом методе я использую UIView transitionFromView:toView:
для перехода ко второму виду. Пока все работает нормально.
Мое второе представление (представление прокрутки) объявлено программно в моем 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
, потому что я попытался добавить и удалить и получил сбой приложения в жесте «щепотка», точно на том же шаге, который завершается с ошибкой анимации. Возможно, это та же ошибка, но я не могу найти причину этого. Любая помощь будет оценена.
Спасибо.
Ok. С помощью Адриана, вот код 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];
}