2013-11-20 56 views
1

我想从底部移动一个UIView到顶部。 我正在使用iOS SDK 7.0,uiviewcontroller的自动布局已打开。UIView animateWithDuration没有得到执行

- (void) viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self.view bringSubviewToFront: myView]; 
    [self moveFromBottom]; 

} 

- (void) moveFromBottom{ 
    [myView setBackgroundColor:[UIColor redColor]]; 
    CGPoint top = myView.center; 
    top.y = self.view.frame.size.height - top.y; 
    [UIView animateWithDuration:5.0f 
          delay:0.0f 
         options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionBeginFromCurrentState 
        animations:^{ 
         myView.center = top; 
        } 
        completion:^(BOOL finished){ 
         if (finished) { 
          NSLog(@"finished"); 
         } 
        } 
    ]; 

完成块得到执行并打印完成但UIView不移动。

我也尝试了动画帧而不是中心,它也不工作。

但是,如果我尝试动画阿尔法相反,它会工作

编辑:如果我在故事板关闭自动布局也将正常工作。

回答

0

myView最初在哪里?如果是死点:

top.y = self.view.frame.size.height - top.y; 

将等于top.y的初始值。所以它不会移动。你的意思是把它移动到顶部。如果是这样,我认为它应该是:

top.y = (myView.frame.size.height/2.0f); 

此外,如果有自动布局启用,请检查您是否有什么限制,并确保其不会迫使它在其位置上的引脚。我会禁用自动布局,以确保这不会导致您的问题。如果一切都失败了,NSLog记录top.y的值以确定它的用途。

+0

没有top.y和myView的center.y很不一样 – Will

2

Autolay打开时,您无法明确设置框架或中心。我的建议是为myView上的y原点约束创建一个IBOutlet,并在您的动画块中设置constant属性。这应该正确动画。

+0

哪里可以找到y-origin约束?我知道有高度和顶部/底部空间来超级查看可以控制y的约束。 – Will

+0

超级查看约束的顶部是您想要的。如果视图的高度是静态的,则不需要底部超级查看约束。 – daltonclaybrook