2013-02-10 35 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秒左右的動畫......

這個問題是通過做一個明確的動畫...有一些圖書館在那裏...我用了一個破壞我的項目...所以我最終放棄了它...並採取了更多...補丁解決方案...把背景顏色所以它掩蓋了運動...

這個問題的解決方案是使用顯式動畫和每個幀...移動這兩個意見相同的點...

我希望這個「解決方案」,幫助社區..