2015-12-21 85 views
1

我了解到,在可可触摸动画约束的方法是只设置它们,然后把[self.view layoutIfNeeded]在动画块,像这样:如何为UIPickerView的高度约束设置动画?

self.someViewsHeightConstraint = 25.0; 
[UIView animateWithDuration:0.5 animations:^{ 
    [self.view layoutIfNeeded]; 
}]; 

这是工作细,例如一个简单的UIView 。但是,它不适用于UIPickerView。它只是在没有动画的情况下进入新的位置。

任何想法,为什么这可能是这种情况?有什么方法可以解决这个问题?

我要去的效果是,Picker View应该缩小到显示选定的项目,随着用户继续输入其他内容。我有一个想法是做一个快照视图和动画,而不是我的工作。

+0

你找到一个解决办法? –

+0

@martynmlostekk我没有,但我没有完全探索下面的答案。 – skagedal

回答

0

我发现试图动画的高度或UIPickerView的放置约束是有问题的。但是,即使您在任何地方都有自动布局约束,包括在要转换的视图中,进行转换似乎也很有效。

下面是一个适用于我的例子。在这种情况下,我将拾取器视图放置在模糊效果视图中 - 但您甚至不需要将选择器视图放入另一个视图中就可以对其进行设置。

在下面的代码中,当我调用show时,它会垂直动画。当我调用隐藏方法时,它会向下动画。

- (void)showPickerViewAnimated:(BOOL)animated; 
{ 
    __weak MyViewController *weakSelf = self; 

    [UIView animateWithDuration:(animated ? kPickerView_AppearanceAnimationDuration : 0.0) 
         delay:(animated ? kPickerView_AppearanceAnimationDelay : 0.0) 
        options:(UIViewAnimationOptionCurveEaseInOut) 
       animations:^{ 
        weakSelf.pickerViewContainerView.transform = CGAffineTransformMakeTranslation(0,0); 
       } 
       completion:^(BOOL finished) { 
        [weakSelf.view layoutIfNeeded]; 
       }]; 
} 


- (void)hidePickerViewAnimated:(BOOL)animated; 
{ 
    __weak MyViewController *weakSelf = self; 

    [UIView animateWithDuration:(animated ? kPickerView_DisappearanceAnimationDuration : 0.0) 
         delay:(animated ? kPickerView_DisappearanceAnimationDelay : 0.0) 
        options:(UIViewAnimationOptionCurveEaseInOut) 
       animations:^{ 
        weakSelf.pickerViewContainerView.transform = CGAffineTransformMakeTranslation(0, kPickerView_Height); 
       } 
       completion:^(BOOL finished) { 
        [weakSelf.view layoutIfNeeded]; 
       }]; 

}

+0

注意:这个技巧对我来说很好,使用iOS 9.2.1。 – idStar

0

选择器视图,如果已经添加约束TopLayout为yPosition将其删除,并添加约束底部布局来代替。 这将解决问题。这里是我的代码和它的工作:

self.timePickerHeightConstraint.constant = pickerIsClosed? 216: 0;

[UIView animateWithDuration:0.5 animations:^{ 
     [self.view layoutSubviews]; 
} completion:^(BOOL finished){ 
}]; 

CONSTRAINT ON UIPICKERVIEW

相关问题