如何为视图转换的一部分制作动画

时间:2012-10-28 09:25:28

标签: iphone objective-c ios uiview cgaffinetransform

我最近偶然发现了一个问题,我有一个可以由用户轮换的视图。然而,在旋转期间,它应该增大10%(按比例放大)。

我希望缩放设置为动画,但旋转要立即可见,因为我在手势识别器的回调中没有动画设置它。

问题:是否可以在不拦截动画缩放的情况下更新CGAffineTransform的旋转,或者无法创建缩放的包装视图?

1 个答案:

答案 0 :(得分:1)

编辑:

我认为缩放的包装器视图是最不容易出错的方式。

如果您非常想避免这种情况,可以尝试使用NSTimer手动创建缩放动画。也许如果你首先查询当前的变换值然后修改它而不是用一个独立创建的变换值替换它(对于旋转和比例),它可以工作。

我认为隐式UIView动画会在开头计算所有后续值,因此会扰乱你的旋转。

另一种方法是在缩放发生时锁定旋转。缺点是,缩放和旋转不会同时进行。无论如何你可以创建一个iVar或属性让我们说rotationLocked并做某事。像这样:

- (void)handlePan:(UIPanGestureRecognizer *)gr
{
    if (gr.state == UIGestureRecognizerStateBegan)
    {
        self.rotationLocked = YES;
        [UIView animateWithDuration:.2 animations:^{
            [self scaleView];
        }completion:^{ self.rotationLocked = NO; };
    }
    if (gr.state == UIGestureRecognizerStateChanged)
    {
        if (!self.rotationLocked){
            // do the rotation
    }
    if (gr.state == UIGestureRecognizerStateEnded)
    {
        // do something else
    }