2013-02-10 88 views
0

我这里搜索了很多,但似乎无法找到答案,我的问题的同时...动画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第一次动画发生时粘在一起,但之后没有更多..

有什么建议吗?

编辑 我现在给一些图片来解释发生了什么

screenshot 1 screenshot 2

+0

可以原谅的隐藏方法的其他部分......它发送self.frame代替self.contentView .frame ...它并没有影响真的,因为我总是发送动画(我现在会改变它) – 2013-02-10 16:54:14

+0

很难理解你所有的观点是什么。你能描述你有什么样的观点,以及你希望他们如何移动?你提到了SubView类,一个选择器和一个表 - 不清楚它们是如何一起工作的(或者它们是否都包含在同一个超级视图中)。 – rdelmar 2013-02-10 16:57:18

+0

好的,当然...这里的子视图类只是一个有能力隐藏或显示从侧面显示的视图,显示和隐藏方法可以做到这一点,使原点向左,向右或向下消失,或恢复其原始框架以显示,之后,self.panning块是子视图调用的可选块,以便此视图的父级可自行调整为视图出现或消失(即视图从左侧出现并且我想要父视图向右移动它腾出空间(如推)...内容视图具有子视图的内容谢谢! – 2013-02-10 20:05:14

回答

1

我把这个作为答案实际上并没有达到...

这里的问题与...的总尺寸的意见...

MAPVIEW大小100%,而tableview大小d 80%...我把他们放在同一个动画中......所以他们会有不同的动作,因为他们必须为整个动作覆盖1.0秒左右的动画......

这个问题是通过做一个明确的动画...有一些图书馆在那里...我用了一个破坏我的项目...所以我最终放弃了它...并采取了更多...补丁解决方案...把背景颜色所以它掩盖了运动...

这个问题的解决方案是使用显式动画和每个帧...移动这两个意见相同的点...

我希望这个“解决方案”,帮助社区..