0

我有一种方法可以放置一堆图层,然后同时定位和调整单个“激活”图层(基本上是用户单击的图层)。包括激活层在内的所有层都是较大层的子层。这是我的方法:

    [CATransaction begin];
    [CATransaction setValue:[NSNumber numberWithFloat:0.7]
                     forKey:kCATransactionAnimationDuration];
    }];
    for (CALayer *layer in self.inactiveLayers) {
       ... do some positioning ...
    }
    CGRect newFrame = activeLayer.frame;
    newFrame.origin.x = 50.0;
    newFrame.origin.y = 50.0;
    newFrame.size.width = 100.0;
    newFrame.size.height = 100.0;
    activeLayer.frame = newFrame;
    [CATransaction commit];

我遇到的问题真的很奇怪。使用上面的代码,没有任何动画运行(甚至不活动层的动画)。但只要我注释掉设置新帧大小和宽度的行,动画就会神奇地重新开始工作。

有什么理由应该发生这种情况吗?

4

2 回答 2

1

解决了这个问题,我在尝试制作动画的图层的超级图层上设置了一个布局管理器,并且当图层边界发生更改时,将调用布局代码(重置图层的大小)。在动画期间禁用布局管理器解决了这个问题。

于 2010-12-18T01:09:03.523 回答
0

这是因为 CAlayer 的 frame 属性是不可动画的。改用 bounds 属性,位置动画将顺利运行。

于 2010-12-17T15:41:54.637 回答