UIView的不当显示其层已经被动画后(UIView displays improperly aft

2019-10-23 09:27发布

我有一个问题,我不就UIViews和核心动画理解。 这是我想做的事:

  • 一个小的视图是通过将它作为它的子视图的一个以上呈现更大的图。
  • 当我点击这个视图中的按钮时,视图应尽量减少,并移动到指定的CGRect。
  • 然后,视图是从它的父除去。

我第一次提出,尽量减少并移动和删除视图,一切工作正常。 但是,当我再次呈现视图,它显示在修改后的位置(尽管它应该在由一个呼叫的原始位置要设置theView.frame = CGRectMake(600.0, 160.0, 339.0, 327.0); ),而所有包含在视图的行为如同它们是在原来的位置不同应答元件(按钮,textviews等)。 这就像视图和层得到由动画dissynchronized,我不知道如何让他们回到同步。

有类似self.view.layer.frame = CGRectMake(600.0, 160.0, 339.0, 327.0); 没有得到任何东西的权利。

我尽量减少并移动动画代码下面给出:

    [CATransaction flush];
    CABasicAnimation *scale, *translateX, *translateY; 
    CAAnimationGroup *group = [CAAnimationGroup animation]; 
    group.delegate = delegate; 
    group.duration = duration; 

    scale = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
    translateX = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"]; 
    translateY = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"]; 

    scale.toValue = [NSNumber numberWithFloat:0.13];
    translateX.toValue = [NSNumber numberWithFloat:137.0];
    translateY.toValue = [NSNumber numberWithFloat:-290.0];

    group.animations = [NSArray arrayWithObjects: scale, translateX, translateY, nil];
    group.fillMode = kCAFillModeForwards; 
    group.removedOnCompletion = NO;

    [theView.layer addAnimation:group forKey:@"MyAnimation"];

如何让层回动画后有何看法?

Answer 1:

如果您删除这两条线会发生什么?

group.fillMode = kCAFillModeForwards; 
group.removedOnCompletion = NO;

你告诉那些线核心动画的是,你希望它继续在动画的前(最后)的状态显示 。 同时,你实际上并没有设置图层的变换,有你用于动画的属性。 这将使事情似乎是不同步的。

现在,你要碰到的问题是消除这些行会导致您的转换时的动画效果已完成恢复到初始状态。 你需要做的实际上是为了使动画完成时他们保持自己的位置设置图层的变换什么。

另一种选择是留在两行,然后实际明确删除图层动画,而不是你所说的设置层框架的,当你准备恢复到原来的状态。 为此,您可以:

[theView.layer removeAnimationForKey:@"MyAnimation"];

该-removedOnCompletion财产告诉层不删除动画完成时间。 现在,你可以明确地将其删除,它应该恢复。

HTH。



文章来源: UIView displays improperly after its layer has been animated