【问题标题】:Setting view.layer.anchorpoint after setting view.frame makes a view blink设置 view.frame 后设置 view.layer.anchorpoint 使视图闪烁
【发布时间】:2014-02-01 19:54:56
【问题描述】:
[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)];

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

【问题讨论】:

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


    【解决方案1】:

    图层的anchorPoint 是一个动画属性。这意味着,如果您只是设置它,则默认情况下图层将动画到新值。当锚点与您正在制作的变换作斗争时,此动画可能会产生您所看到的闪烁。

    为防止这种情况发生,您需要在 CATransaction 内进行更新并禁用操作:

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

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

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

    【讨论】:

    • 谢谢!我最终在设置锚点之前设置了框架。非常感谢:)
    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 2015-08-30
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2013-03-02
    相关资源
    最近更新 更多