21

これは、いくつかのサブビューを持つ UIView がある iPad プロジェクトであり、[UIView transitionFromView:toView:duration:options:completion] を使用してこの UIView の 1 つをアニメーション化しようとしていますが、このメソッドを実行すると、親ビュー全体が反転します! これは私が使用しているコードです:

UIView *secondView = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 300, 300)];
[newView setBackgroundColor:[UIColor redColor]];
    [UIView transitionFromView:self.firstView.view toView:secondView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];

親ビュー全体をアニメーション化せずに、このビューを切り替える方法について何か考えはありますか? ありがとう!

4

6 に答える 6

71

このコードはあなたを助けるかもしれません:

反転する 2 つのビューを同じサイズの名前のないビュー内に配置し、それらをビューにリンクしIBOutlet UIView *newView,*oldView;て、新しいビューを一番上に置きます

bool a = NO;

@implementation ViewController

- (IBAction)flip:(id)sender 
{
    if (a == NO) {
        [UIView transitionFromView:oldView toView:newView  
                  duration:1.0 
                  options:UIViewAnimationOptionTransitionFlipFromLeft 
                  completion:NULL];
        a = YES; // a = !a;
    }
    else {
        [UIView transitionFromView:newView toView:oldView  
                  duration:1.0 
                  options:UIViewAnimationOptionTransitionFlipFromLeft 
                  completion:NULL];
        a = NO; // a = !a;
    }
}
于 2012-03-01T22:00:24.207 に答える
3

コンテナー ビューを使用してサブビューを保持し、コンテナー ビューをアニメーション化しようとしているサブビューと同じサイズにします。

したがって、このようにビューを設定できます。

self.view->「コンテナ ビュー」-> サブビュー

于 2012-03-01T21:52:05.067 に答える
2

古い学校のアニメーションを使用して、この問題を修正しました。

[UIView beginAnimations:@"Flip" context:nil];
[UIView setAnimationDuration:1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:firstView cache:YES];

[self addSubview:secondView];

[UIView commitAnimations];

さらに、firstView を削除できます。

[firstView removeFromSuperview];
于 2013-08-30T14:31:05.250 に答える
2
**//flipping view continuously**  



 bool a = NO;


-(void)viewDidLoad
{



// THIS is the canvass holding the two views this view is flipping
 UIView *v=[[UIView alloc]initWithFrame:CGRectMake(40, 40, 150, 150)];

   v.backgroundColor=[UIColor clearColor];

    [self.view addSubview:v];

     [v addSubview:yourfirstview];
     [v addSubview:yoursecondview];

// calling the method

[NSTimer scheduledTimerWithTimeInterval:2.0
                                     target:self
                                   selector:@selector(flip)
                                   userInfo:nil
                                    repeats:YES];

}



//flipping view randomly

-(void)flip 

{

if (a == NO) 
{

[UIView transitionFromView:yourfirstview toView:yoursecondview duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
        a = YES;
    }

else if(a==YES) 
{

[UIView transitionFromView:yoursecondview toView:yourfirstview duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
     a = NO;
  }

}
于 2013-01-19T12:52:55.080 に答える