2011-11-18 49 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]; 
}