2011-11-18 37 views
5

我是新的動畫,我正在使用以下代碼進行翻轉動畫。iPhone動畫:如何僅動畫子視圖?不是全部的觀點?

//MyMapView is UIView 

MyMapView *aMapView = [[MyMapView alloc] initWithFrame:CGRectMake(0, 118, 321, 300) AndResArray:self.nearMeArray]; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1.0]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; 
    [[self view] addSubview:nearMeMap]; 

    [UIView commitAnimations]; 

其工作正常。但全視圖(超級視圖)翻轉。

我只想翻轉子視圖是MyMapView。超級視圖不應該翻轉。

如何做到這一點???

EDITED

屏幕:

下面是主屏幕。當點擊地圖按鈕時,我想僅翻轉屏幕的棕色部分。整個屏幕不應該翻轉。

enter image description here

謝謝...

+0

您需要粘貼您的視圖來將動畫粘貼到另一個子視圖中。 – Borzh

回答

3

我弄清楚是什麼問題。請參閱下面的代碼。

MapView.m

- (id)initWithFrame:(CGRect)frame { 

self = [super initWithFrame:frame]; 
if (self) { 
    // Initialization code. 

    [self performSelector:@selector(addMapView) withObject:nil afterDelay:2.0]; 

} 
return self; 
} 

- (void) addMapView { 

//MyMapView is UIView 

MKMapView *aMapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 321, 300)]; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self cache:YES]; 
[self addSubview:aMapView]; 

[UIView commitAnimations]; 

} 

並在您想要的MapView類的,簡單地添加對象之後。如下所示。

//MyMapView is UIView 
mapView *aMapView = [[mapView alloc] initWithFrame:CGRectMake(0, 118, 321, 300)]; 
[[self view] addSubview:aMapView]; 

如果此評論對您有幫助,請投票發起。

謝謝,

MinuMaster。

+0

偉大的代碼感謝....當我動畫它的背景應該被清除一件事。任何想法? – Maulik

+0

地圖查看背景???或超級視圖背景。 – MinuMaster

+0

加入聊天室。 – MinuMaster

1

您需要添加視圖以self.view,然後只翻轉aMapView:

MyMapView *aMapView = [[MyMapView alloc] initWithFrame:CGRectMake(0, 118, 321, 300) AndResArray:self.nearMeArray]; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[self.view addSubView:aMapView]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:aMapView cache:YES]; 

[UIView commitAnimations]; 
+0

我之前嘗試過......沒有任何反應..只要aMapView不顯示任何動畫! – Maulik

+0

答案已更新。也許你需要在塊中添加視圖。 –

+0

我覺得我做了同樣的事情! – Maulik

1

這樣的動畫過渡動畫視圖的內容。系統會在動畫開始時拍攝內容的快照,當您提交時會拍攝另一個快照,然後在它們之間進行動畫處理。正如您在原始代碼中看到的那樣,整個視圖都會變成動畫。

最簡單的解決方案可能只是介紹一箇中間視圖,即視圖的大小和位置。然後動畫視圖爲您添加地圖。

有關Creating Animated Transitions Between Views的「編程指南」的更多信息,儘管您正在使用的方法在iOS 4中已被新的基於塊的版本取代。

+0

中間視圖就是這樣! – Borzh

2

Matteo的答案部分正確,但您需要在添加視圖之前在視圖上設置動畫,否則它將無法正常工作。就像這樣:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight 
         forView:aMapView 
         cache:YES]; 
[self.view addSubview:aMapView]; 
[UIView commitAnimations]; 

或者,你可以使用的iOS 4引入了基於塊的API下面是一個例子。

[UIView transitionWithView:aMapView 
     duration:1.0 
     options:UIViewAnimationTransitionFlipFromRight 
     animations:^{ [self.view addSubview:aMapView]; } 
     completion:^(BOOL f){ } 
]; 
0
-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    OptionView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 70, 70)]; 
    OptionView.backgroundColor=[UIColor blueColor]; 
    OptionIsShow=false; 

    MoveView=[[UIView alloc] initWithFrame:CGRectMake(40, 40, 70, 70)]; 
    [MoveView setBackgroundColor:[UIColor redColor]]; 
    [self.view addSubview:MoveView]; 

} 

-(void)ViewOrHideOptionView 
{ 

     CGContextRef context = UIGraphicsGetCurrentContext(); 
     [UIView beginAnimations:nil context:context]; 

     [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.MoveView cache:NO]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
     [UIView setAnimationDelegate:self]; 
     [UIView setAnimationDuration:1.0]; 

     if(!OptionIsShow) 
     { 
      [self.MoveView addSubview:OptionView]; 
      OptionIsShow=true; 
     } 
     else 
     { 
      [self.OptionView removeFromSuperview]; 
      OptionIsShow=false; 
     } 

     [UIView commitAnimations]; 
}