我这里搜索了很多,但似乎无法找到答案,我的问题的同时...动画2个UIViews在(粘在一起)
我有一个叫子视图类,这个类有一个简单的功能,它可以显示或dissapear动画
它确实是这样的:
-(void)showAnimated:(BOOL)animated {
self.active = YES;
//Make topmost
[self.parentView bringSubviewToFront:self];
if (animated) {
[UIView animateWithDuration:0.5
delay:0.0f
options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.frame = self.originalFrame;
if (self.panningBlock) {
self.panningBlock(self.contentView.frame);
}
}
completion:^(BOOL finished){
}];
}
else {
self.frame = self.originalFrame;
if (self.panningBlock) {
self.panningBlock(self.contentView.frame);
}
}
凡self.originalFrame已经存储了查看的位置,隐藏部分,如果真的类似
的原始值-(void)hideAnimated:(BOOL)animated {
self.active = NO;
//Store the frame
CGRect _frame = self.frame;
//Set the view starting point
switch (self.showingLocation) {
case SubViewShowingLocationRight:
_frame.origin = CGPointMake(_frame.size.width, _frame.origin.y);
break;
case SubViewShowingLocationBottom:
_frame.origin = CGPointMake(_frame.origin.x, _frame.size.height);
break;
case SubViewShowingLocationLeft:
_frame.origin = CGPointMake(-_frame.size.width, _frame.origin.y);
break;
default:
break;
}
if (animated) {
[UIView animateWithDuration:0.5
delay:0.0f
options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.frame = _frame;
if (self.panningBlock) {
self.panningBlock(self.contentView.frame);
}
}
completion:^(BOOL finished){
}];
}
else {
self.frame = _frame;
if (self.panningBlock) {
self.panningBlock(self.frame);
}
}
[self.delegate didDismissSubView:self];
}
//// 所以动画出现在self.frame = _frame和self.frame = self.originalFrame
也我有self.panningBlock,即一个块,该父视图可以给(它的工作原理,因此它可以调整自己到子视图的框架变化..即子视图有一个选择器,它从底部出现,我需要调整表视图,因此它不会被选择器遮蔽)
我做的一个例子是
__weak MapViewController * weakSelf = self;
[weakSelf.placesView setPanningBlock:^(CGRect _frame){
if (weakSelf.placesView.isActive) {
CGRect mapFrame = weakSelf.mapView.frame;
mapFrame.origin.x = _frame.origin.x + _frame.size.width;
weakSelf.mapView.frame = mapFrame;
}
else {
CGRect mapFrame = weakSelf.mapView.frame;
mapFrame.origin.x = 0;
weakSelf.mapView.frame = mapFrame;
}
}];
这里父视图向右移动,如果子视图呈现给喜欢动漫推
这一切,了解所需的代码(这是我的第一个问题,所以请原谅这里的任何海北)
的要点是动画不会同时发生, 会发生什么情况是进入的视图进入速度比父视图要慢一些,它们不会粘在一起,我真的不知道该怎么做做...
BTW:他们d o第一次动画发生时粘在一起,但之后没有更多..
有什么建议吗?
编辑 我现在给一些图片来解释发生了什么
可以原谅的隐藏方法的其他部分......它发送self.frame代替self.contentView .frame ...它并没有影响真的,因为我总是发送动画(我现在会改变它) – 2013-02-10 16:54:14
很难理解你所有的观点是什么。你能描述你有什么样的观点,以及你希望他们如何移动?你提到了SubView类,一个选择器和一个表 - 不清楚它们是如何一起工作的(或者它们是否都包含在同一个超级视图中)。 – rdelmar 2013-02-10 16:57:18
好的,当然...这里的子视图类只是一个有能力隐藏或显示从侧面显示的视图,显示和隐藏方法可以做到这一点,使原点向左,向右或向下消失,或恢复其原始框架以显示,之后,self.panning块是子视图调用的可选块,以便此视图的父级可自行调整为视图出现或消失(即视图从左侧出现并且我想要父视图向右移动它腾出空间(如推)...内容视图具有子视图的内容谢谢! – 2013-02-10 20:05:14