在Xcode中动画CGRect的最佳方法是什么?

时间:2014-06-09 22:33:55

标签: ios objective-c

我的应用程序将使用Pan Gesture允许您在视图控制器内向右侧平移手势容器视图,以显示隐藏在容器视图后面的菜单。 (类似于YouTube应用程序如何让用户将手指向右移动以显示主菜单或默认锁定屏幕如何让您向右平移以显示密码键盘)

- (IBAction)testPan:(UIPanGestureRecognizer *)sender
{
    CGPoint translation = [sender translationInView:self.view];
    CGPoint location = [sender locationInView:self.view];
    CGPoint velocity = [sender velocityInView:self.view];

    _theView.frame = CGRectMake( translation.x, 50, 300, 300); 

    if (sender.state == UIGestureRecognizerStateEnded) {
        NSLog(@"All fingers are lifted");
        _theView.frame = CGRectMake( 10, 50, 300, 300);
    }
}

所以我现在要做的就是确保这一行:

_theView.frame = CGRectMake( 10, 50, 300, 300);

if语句逐渐发生,而不是像现在一样发生。

我的计划最初是使用一个可以取值" translation.x"并逐渐通过毫秒使其等于10,以使平移手势具有动画效果。

但显然Objective-C不允许你睡觉()几毫秒,我猜他们不允许你出于效率目的。

那么我怎样才能使浮点值在2秒内从x变为10而不是立即?

CGRect是否已经包含了一些可以自动转换形状的内容?

1 个答案:

答案 0 :(得分:2)

执行所需操作的确切机制内置于视图系统中,非常易于使用:

[UIView animateWithDuration:2.0 animations:^{
    _theView.frame = CGRectMake(10, 50, 300, 300);
}];

你基本上给UIView一个持续时间(2秒)和一个块,你可以在其中直接更改任何可动画的视图属性(如frame),这将在整个持续时间内发生。 (因此,不是自己管理计时器并更新矩形然后更新框架,您可以告诉系统直接为框架设置动画。)