动画 UIView 大小跳跃

Posted

技术标签:

【中文标题】动画 UIView 大小跳跃【英文标题】:Animating UIView size jumps 【发布时间】:2013-02-15 22:39:59 【问题描述】:

想要通过改变 UIView 的高度和位置来为它设置动画。第一个动画跳跃?我在 Storyboards 中将 UIView (theView) 的大小设置为 216 的高度。因此应用程序加载并显示 theView。我单击 theView,它的高度迅速跃升至 200+ 像素,然后按应有的动画效果?

- (void)singleTapAction:(UIGestureRecognizer *)singleTap 
UIView *view = singleTap.view;
[UIView animateWithDuration:1.2 delay:0 options:UIViewAnimationCurveLinear | UIViewAnimationOptionAllowUserInteraction animations:^
    CGRect theFrame = self.theView.frame;
    theFrame.size.height += 100.f;  <!-- when it hits here the view jumps then animates
    self.theView.frame = theFrame;

                 completion:^(BOOL finished) 
                     if(finished)
                         [UIView animateWithDuration:1.2 delay:0 options:UIViewAnimationCurveLinear | UIViewAnimationOptionAllowUserInteraction animations:^
                             CGRect theFrame = self.theView.frame;
                             theFrame.origin.y -= 100.f;
                             self.theView.frame = theFrame;
                         
                                          completion:^(BOOL finished) 
                                              NSLog(@"animations complete");
                                          ];
                     
                 ];

【问题讨论】:

不确定是否理解您的问题。顺便说一句,您在 UIView::animate 中没有“自动反转”选项。 @Vinzius 你是对的。 【参考方案1】:

尝试移动线条

CGRect theFrame = self.theView.frame;
theFrame.size.height += 100.f;  <!-- when it hits here the view jumps then animates

在街区外。放在调用动画方法之前。

【讨论】:

Bounds 将使其双向增长,因为它与父级无关。 Vinzius 上面的正确答案是 UIViewAnimationCurveLinear。如果您更改为 UIViewAnimationCurveOut 它可以工作,但 UIViewAnimationCurveLinear 或 UIViewAnimationCurveIn 会使其跳转。或者您可以完全删除这些选项并且它可以工作。

以上是关于动画 UIView 大小跳跃的主要内容,如果未能解决你的问题,请参考以下文章

使用自动调整子视图大小为 UIView 帧大小更改动画

同时动画调整大小和移动 UIView

iOS UIView drawRect 调整大小动画

UIView动画中的UIButton字体大小问题

UIView 动画改变按钮的大小

调整 UIView 大小时动画无法按预期工作