UIView 动画交互

Posted

技术标签:

【中文标题】UIView 动画交互【英文标题】:UIView animation interaction 【发布时间】:2012-03-14 13:33:49 【问题描述】:

我在长按手势上有动画帧大小的 UIView。

- (IBAction)longPressGesture:(id)sender 
    NSTimeInterval duration = 1;
    CGRect newFrame = self.view.frame;

    switch (((UIGestureRecognizer *)sender).state) 
        case UIGestureRecognizerStateBegan:
            newFrame.size.height += 100;
            break;
        case UIGestureRecognizerStateEnded:
            newFrame.size.height -= 100;
            break;            
        default:
            break;
    

    [UIView animateWithDuration:duration animations:^
        self.view.frame = newFrame;
    ];


在 tap_begin 帧高度增加到最大尺寸(heigh + 100),在 tap_end 减小到原始尺寸(heigh - 100)。问题是当我点击时,帧开始增长,然后在增长时我松开手指,第二个动画从大帧开始,而不是从当前状态开始。

例如,帧从高度 200 开始动画到 300,在动画中间(当帧高度为 250 时)我松开手指,帧高度立即设置为 300 并开始减小到 200。

如何实现可以中断第一个动画并从当前高度(例如 250)开始第二个动画的行为?

或者第一个动画必须首先完成并且只有在第二个动画开始之后才能完成的行为?

【问题讨论】:

【参考方案1】:

您可以尝试使用animateWithDuration:delay:options:animations:completion: 并包含选项setAnimationBeginsFromCurrentState

【讨论】:

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

UIVIew 块动画后用户交互中断

在 UIView 动画期间难以允许用户交互

核心动画与UIView

UIView动画设置参数

ios开发核心动画七:核心动画与UIView动画的区别

在动画 UIView/CALayer 中处理触摸的最佳模式?