2

我将闪烁动画应用于splitviewController 的第一个 viewController 中的表contentViewtableViewcell我的问题是,当我用 splitViewController 的presentsWithGesture属性隐藏 FirstViewcontroller 时动画停止

我已将 UItableViewCell 子类化,并在设置属性时添加动画,并将动画添加到contentView如下cell所示

-(void)setProperty:(Property *)aProperty
{
    _property=aProperty;
    [self.contentView addSubview:self.dateLabel];
    self.dateLabel.text=[self.meeting stringforScheduleDate];
    if (_property.opened) {
        CABasicAnimation *theAnimation;
        CALayer *layer=[self.contentView layer];
        theAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"];
        theAnimation.duration = 0.5;
        theAnimation.delegate=self;
        theAnimation.fromValue = [NSNumber numberWithFloat:0.0];
        theAnimation.toValue = [NSNumber numberWithFloat:1.0];
        theAnimation.repeatCount=HUGE_VALF;
        theAnimation.autoreverses=YES;
//        [layer removeAnimationForKey:@"opacity"];
        [layer addAnimation:theAnimation forKey:@"opacity"];
    }
    else
    {
        CALayer *layer=[self.contentView layer];
        [layer removeAnimationForKey:@"opacity"];
    }
}

我不知道 ViewController 的行为是在隐藏时停止其视图层次结构中的核心动画,还是我在代码中遗漏了某些内容。所以帮助我的同龄人

4

1 回答 1

5

layer是的,一旦视图控制器被隐藏,动画就会从视图中删除。奇怪的是,有时即使 ,动画也会持续存在view.layer.animationKeys.count == 0,但通常不会。

您最好的选择是在@vignesh_kumar-viewWillAppear:-viewDidAppear:... 中开始动画,可能通过以下方法:

- (void)startAnimations
{
    NSArray *visibleCells = self.tableView.visibleCells;
    for (CustomTableViewCell *cell in visibleCells) {
        [cell animateIfNeeded];
    }
}

@doNotCheckMyBlog,在这里您可以调用启动headerView动画的方法。

除此之外,我猜如果您将应用程序设置为背景然后恢复它,动画也会停止。

您还需要-startAnimations在应用程序恢复时调用该方法。例如,您的应用程序委托可以NSNotification在其-applicationDidBecomeActive:or-applicationWillEnterForeground:方法中发送一个。您MasterViewController可以观察此通知并-startAnimations在收到通知时拨打电话。

如果您不需要在动画中返回到相同的确切状态,那么这应该不是一个大问题。如果您需要在动画中返回与应用程序在后台运行时相同的状态,那么您还需要保存状态,然后在重新启动动画时设置初始状态。

于 2014-01-18T05:40:29.237 回答