如何翻转单个UIView(不翻转父视图)

这是一个iPad项目,我有一个UIView与几个子视图,我想使用[UIView transitionFromView:toView:duration:options:completion]来animation这个UIViews之一,但是当我运行这个方法时,整个父视图被翻转! 这是我正在使用的代码:

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]; 

任何想法,我怎么能在这个意见之间翻转,而没有animation整个父视图? 谢谢!

此代码可能会帮助您:

把你想要在一个未命名的视图内翻转的两个视图具有相同的大小,并链接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; } } 

我也有问题得到这个工作。 我使用了Floris编写的代码,但是虽然它为第一个“翻转”工作,但是下一个翻转开始变得奇怪,前端UI视图中的button和标签丢失了位置。

我把下面的代码放到位,它工作正常。

几件事要注意:

  1. panelView是ViewController上的UIView控件,它有两个嵌套在其中的子视图(UIViews)。 第一个叫做frontView,第二个叫backView。 (见下图)

IB中的视图和子视图的图像

  1. 我有一个名为displayFront类的布尔属性

(在我的.h)

 @property BOOL displayingFront; 

在我的

 @synthesize displayingFront; 

在我的viewDidLoad方法

 self.displayingFront = YES; 

这是.m中的代码,如果正面和背面的UIViews我已经assembly到两个button…

 - (IBAction)flip:(id)sender { [UIView transitionWithView:self.panelView duration:1.0 options:(displayingFront ? UIViewAnimationOptionTransitionFlipFromRight : UIViewAnimationOptionTransitionFlipFromLeft) animations: ^{ if(displayingFront) { self.frontView.hidden = true; self.backView.hidden = false; } else { self.frontView.hidden = false; self.backView.hidden = true; } } completion:^(BOOL finished) { if (finished) { displayingFront = !displayingFront; } }]; } 

使用容器视图来保存子视图,并使容器视图的大小与您尝试animation的子视图相同。

所以,你可以像这样设置你的意见。

self.view->“容器视图” – >子视图

 **//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; } } 

我通过使用老派animation解决了这个问题:

 [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];