【发布时间】:2016-07-20 23:34:09
【问题描述】:
这里的 REPRO 存储库:https://github.com/kaolin/38492498/tree/master
我有一个@property int percentScanned。
我已经设置了 needsDisplayForKey:
+ (BOOL)needsDisplayForKey:(NSString *)key {
if ([@"percentScanned" isEqualToString:key]) {
return YES;
}
return [super needsDisplayForKey:key];
}
我的展示方式:
- (void)display {
_percentTextLayer.string = [NSString stringWithFormat:@"%02d%%",[[self presentationLayer] percentScanned]];
}
我的动画:
[CATransaction begin];
self.percentScanned = 99;
_percentTextLayer.string=@"99%";
[CATransaction setCompletionBlock:^{
_percentTextLayer.string=@"99%";
self.percentScanned = 99;
}];
{
CABasicAnimation *a = [CABasicAnimation animationWithKeyPath:@"percentScanned"];
[a setFromValue:@0];
[a setToValue:@99];
[a setDuration:4.];
[self addAnimation:a forKey:@"percentage"];
}
[CATransaction commit];
这一切都很好,除了在动画结束时,我的模型层字符串回到“00%”。正如你所看到的,我把感觉像是厨房水槽的东西强迫它保持在“99%”(在animation.removedOnCompletion = NO;和animation.fillMode = kCAFillModeForwards;的“黑客”之外——实际上,添加这些并没有帮助!)。
我确实在大约 3/30 秒后在同一图层上有另一个动画,使不透明度逐渐消失....但是将其推出或删除似乎并没有不同。
我知道如何为标准动画值执行此操作,但对于如何使用这样的辅助/评估值执行此操作,我缺少一些东西......
编辑添加:
一路上,添加animation.removedOnCompletion = NO; 和animation.fillMode = kCAFillModeForwards; 确实开始“工作”,但我不想泄露动画......
如果我为 percentScanned 添加一个 setter,它不会以 0 结尾调用,而是 display 以 0 结尾调用。很难追踪调用 setPercentScanned 和调用 display 之间的联系...
我可以破解我的display 来读取如下内容:
- (void)display {
if ([[self presentationLayer] percentScanned] != 0) {
_percentTextLayer.string = [NSString stringWithFormat:@"%02d%%",[[self presentationLayer] percentScanned]];
}
}
然后它适用于我的特定用例,但这仍然不太理想......
在 display 方法中设置断点是相当无用的(当然它只是在 display_if_needed 中发生)。 :/
【问题讨论】:
标签: ios caanimation