如何使用具有自动布局约束的动画移动视图在iOS上

时间:2015-12-04 06:47:57

标签: ios objective-c storyboard autolayout uiviewanimation

我正在执行一项任务,我需要将视图移动35个像素才能显示该视图下方的视图。

或者 你可以说我需要在顶部插入一个像通知一样的栏,并在运行时将现有视图移动35个像素。

问题在于自动布局,以支持所有屏幕。转移不是我们想要的......这里有什么建议吗? 顶视图有一个约束,它与顶视图的距离为零,当我们显示下面的视图时,需要在运行时更改。

以下是转换前的屏幕: enter image description here

转移并显示图像后:

enter image description here

我也给了侧边栏视图。 NotifView:我们需要在运行时显示的黄色视图 twoView:我们需要转移到顶部显示notifview。

- (无效)shiftTwoView:(的NSString *)摘要{

CGFloat shiftHeight = 35.0f;

CGRect twoRect = twoView.frame;
    twoRect.origin.y += shiftHeight;
    twoRect.size.height -= shiftHeight;


[UIView animateWithDuration:3.5
                 animations:^{
                     twoView.frame = twoRect;
                 }];

}

1 个答案:

答案 0 :(得分:1)

使用自动布局时,无需像这样设置框架。您可以通过编程方式操作约束值来执行此操作。由于您尚未明确说明您在此处应用的所有约束,我将解释您需要执行的操作。

notifyview: - leading = 0, trailing = 0, top = 0, height = 0;  
twoView: - leading = 0, trailing = 0, top(to notifview) = 0; bottom = 0;

现在为notifyview的身高限制创建一个IBOutlet,让我们说notifyViewHeightConstraint

现在要显示notifyView的内容,您需要做的就是增加它的高度。默认情况下,此高度为故事板中的0。您可以像notifyViewHeightConstraint.constant = 40;一样进行更改。完成后需要再次消失,可以将constant值设置为0;

-(void)shiftTwoView:(NSString*)summary  
{  
     notifyViewHeightConstraint.constant = 40;   
    [UIView animateWithDuration:2.0 animations:^{  
            [self.view layoutIfNeeded];  
    }]; 
}