ios两个子视图同一时间进入和离开动画
在一个视图控制器中,加入了两个视图targetSubview和sourceSubview。targetSubview默认是隐藏的,sourceSubview默认是可见的。
现在,我有这样一个需求。通过手指下滑,将targetSubview从上向下拉入到屏幕中,同时,sourceSubview将随着从屏幕下方离开。两个视图同步进入和离开是同步操作,用动画来实现。
第一种方法,使用UIView的类方法transition来实现,
[UIView transitionFromView:sourceSubview toView:targetSubview duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
但,只能实现上下或左右翻转的效果,没有找到上下滑入滑出的效果。而且,该方法还将sourceSubview给remove掉了。
因此,这种方法不能满足要求。
第二种方法,使用使用UIView的类方法Animations来实现,是用delegate做一些前置或后置操作。
targetSubview.frame = CGRectMake(0, targetSubview.frame.size.height + 50, targetSubview.frame.size.width, targetSubview.frame.size.height);
[UIView beginAnimations:@"Anim1" context:nil];
[UIView setAnimationDuration:1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDelegate:self];
targetSubview.hidden = NO;
targetSubview.frame = CGRectMake(0, 0, targetSubview.frame.size.width, targetSubview.frame.size.height);
[UIView commitAnimations];
[UIView beginAnimations:@"Anim2" context:nil];
[UIView setAnimationDuration:3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDelegate:self];
sourceSubview.frame = CGRectMake(0, -50, sourceSubview.frame.size.width, sourceSubview.frame.size.height);
sourceSubview.hidden = YES;
[UIView commitAnimations];
//动画结束后执行
//sourceSubview.hidden = YES;
这个方法实现了targetSubview视图的动画方式缓缓进入,但sourceSubview立即消失,没有动画效果。
因此在第二个动画设置中,我将sourceSubview.hidden设置为了yes,如果不设置会有动画效果,但是sourceSubview视图因为过高会有部分遗留在屏幕上。
即使,在动画结束后设置也该属性,也不行。
这个动画的效果,实际上是在后台执行的,类似多线程方式在运行。动画运行时间设置为1秒,但最后程序不会等待的,因此,这里需要设置delegate才能实现这个效果了。在动画结束后,delegate方法+ (void)setAnimationDidStopSelector:(SEL)selector必须实现,在该方法中调用sourceSubview.hidden = YES;才行。
在动画开始前,也有一个delegate方法+ (void)setAnimationWillStartSelector:(SEL)selector,可以做一些设置。
第三种方法,还是使用使用UIView的类方法Animations来实现,但是是用block实现,需要在ios4.0以上才能执行。现在苹果都将ios版本都升级到7.0,老版本的用户越来越少了。
targetSubview.alpha=0.0;
targetSubview.hidden = NO;
相关新闻>>
- 发表评论
-
- 最新评论 更多>>