如何翻转单个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和标签丢失了位置。
我把下面的代码放到位,它工作正常。
几件事要注意:
- panelView是ViewController上的UIView控件,它有两个嵌套在其中的子视图(UIViews)。 第一个叫做frontView,第二个叫backView。 (见下图)
- 我有一个名为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];