设置view.frame后设置view.layer.anchorpoint会使视图闪烁

时间:2014-02-01 19:54:56

标签: ios objective-c core-graphics calayer cgaffinetransform

[self setTransform:CGAffineTransformIdentity];
[self setFrame:CGRectMake(o.x, o.y, width, self.frame.size.height)];
if(width != 0)
{
   self.layer.anchorPoint=CGPointMake((wsCollectionView_CellSize/2)/width, 0.5);
}
[self setTransform:CGAffineTransformMakeRotation(angle)];

我使用此代码来改变我的视图的外观,但是当执行此代码时,我可以看到在锚点附近有点眨眼,就像它被调整一样,我认为这是因为当我设置新帧时,然后是新锚点点已设置,正在重绘。 所以我猜我需要的是同时执行它或者必须同时设置这些属性。实现这个目标的方法是什么? 或者可能有一种方法来设置锚点并且它会不变?

1 个答案:

答案 0 :(得分:1)

图层的anchorPoint是可动画的属性。这意味着,如果您只是设置它,那么默认情况下该图层将设置为新值的动画。此动画可能会产生您所看到的闪烁,因为锚点会对您正在进行的变换进行战斗。

为防止出现这种情况,您需要在禁用操作的CATransaction内进行更新:

[CATransaction begin];
[CATransaction setDisableActions:YES];
layer.anchorPoint = ...
[CATransaction commit];

这将立即更新图层的锚点。

通常,更新定位点也会更新视图的帧,因此您通常希望在设置定位点后设置帧。除非在上面的代码中已经考虑到这一点。