0

私は他の SO の質問からいくつかのコードを取得しましたが、何かおかしなことをしているに違いありません。アプリは最初のビューから 3 番目のビューにジャンプします。私が達成しようとしているのは次のとおりです。

ViewController 1 Image 1 - 画像をロードします。ViewController 1 画像 2 にすばやくクロス ディゾルブします。

ViewController 1 Image 2 - ViewController 2 に反転します。

クロス ディゾルブが発生しますが、VC2 に移動します。私は一日のほとんどの間、これに悩まされてきました。バスタブに座っている間、助けを求める時が来ました.

これが私がやってきたことです:

    - (void)viewDidLoad

        {
            NSLog(@"%s", __FUNCTION__);
            [super viewDidLoad];
        }

        - (void)viewDidAppear:(BOOL)animated {
            NSLog(@"%s", __FUNCTION__);

            sleep (2);
            [self transition1]; //showing image 1
        }

        - (void) transition1 {
            NSLog(@"%s", __FUNCTION__);
            /*
            [UIView transitionFromView:firstView
                          toView:secondView
                        duration:3.0
                         options:UIViewAnimationOptionTransitionCrossDissolve
                        completion:^(BOOL finished) {
                            [firstView removeFromSuperview];
                        }];
             */

            //this transition doesn't happen

UIImage * secondImage = [UIImage imageNamed:@"image2.png"];

[UIView transitionWithView:self.firstView
                        duration:5.0f
                         options:UIViewAnimationOptionTransitionCrossDissolve
                        animations:^{
                            self.imageView.image = secondImage;
                        } completion:NULL];



            sleep (2);
            [self transition2];
        }

        - (void) transition2 {
            NSLog(@"%s", __FUNCTION__);
            self.patterns = [[PatternViewController alloc] initWithNibName:@"PatternView_iPad" bundle:nil];
            self.patterns.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
            [self presentViewController:patterns animated:YES completion:nil];
        }

助けてくれてありがとう。

アップデート

Moxy の提案に従って、コードを次のように更新しました。

- (void)viewDidAppear:(BOOL)animated {
    NSLog(@"%s", __FUNCTION__);
    [self performSelector:@selector(transition1)
             withObject:nil
             afterDelay:2.0f];
}

-(void)transition1
{
    NSLog(@"%s", __FUNCTION__);
    UIImage * secondImage = [UIImage imageNamed:@"image2.png"];
    [UIView transitionWithView:self.firstView
                duration:5.0f
                 options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                            self.imageView.image = secondImage;
                }
                completion:^(BOOL finished){
                            [self performSelector:@selector(transition2)
                                       withObject:nil
                                       afterDelay:2.0f];
                }];
}

-(void)transition2
{
    NSLog(@"%s", __FUNCTION__);
    self.patterns = [[PatternViewController alloc] initWithNibName:@"PatternView_iPad"
                                          bundle:nil];
    self.patterns.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentViewController:patterns
                 animated:YES
                 completion:nil];
}
4

1 に答える 1

3

あなたがする必要があるのは、最初のアニメーションの完了ブロックで2番目のアニメーションを開始することです。Sleep()は、おそらく使用すべきではないものです。

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    NSLog(@"%s", __FUNCTION__);
    [self performSelector:@selector(transition1)
               withObject:nil
               afterDelay:2.0f]
}

-(void)transition1
{
    NSLog(@"%s", __FUNCTION__);
    UIImage * secondImage = [UIImage imageNamed:@"image2.png"];
    [UIView transitionWithView:self.firstView
                      duration:5.0f
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                            self.imageView.image = secondImage;
                    }
                    completion:^(BOOL finished){
                            [self performSelector:@selector(transition2)
                                       withObject:nil
                                       afterDelay:2.0f]
                     }];
}

-(void)transition2
{
    NSLog(@"%s", __FUNCTION__);
    self.patterns = [[PatternViewController alloc] initWithNibName:@"PatternView_iPad" 
                                                            bundle:nil];
    self.patterns.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentViewController:patterns
                       animated:YES
                     completion:nil];
}
于 2013-03-03T00:17:27.480 に答える