Tra*_*ggs 2 core-animation uiview ios ios7
我有一个自定义UIView子类(ValveStatusView).它是一个放置在自定义'UITableViewCell subclass (ValveCell) . Upon receivingawakeFromNib inValveStatusView`中的子视图,我设置了一些子图层,其中一个是动画的.动画设置代码如下所示:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(32, 64 + 6)];
animation.duration = 0.75;
animation.repeatCount = HUGE_VALF;
animation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseIn];
[drop addAnimation:animation forKey:@"position"];
Run Code Online (Sandbox Code Playgroud)
它使得"掉落"的图像永远地从水龙头反复掉落.这些单元格嵌入a UITableView,然后嵌入标签视图中.当我导航到另一个选项卡,然后返回时,我的动画不再运行了.我假设当包含我的视图的视图堆栈不再映射到窗口时,它会关闭动画.这是正确的假设吗?假设它是,当视图再次映射时,让它再次运行的惯用方法是什么?
我查看了这些UIView方法,但没有任何东西跳出来作为明显的"钩子"让它再次运行.我承认要浏览它们,而不是详尽地阅读它们.
你应该在你的问题中提到包含动画层的视图是UITableViewCell的子类.:)因为,这实际上是动画停止的原因.UITableViewCell从其子图层中删除动画,以避免在从tableview中删除单元格以供以后重用时进行不必要的计算.要解决您的问题,您可以覆盖prepareForReuse单元格的方法并在那里重新启动动画.所以你应该做这样的事情:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
// some initial setup here...
[self addAnimation];
}
return self;
}
- (void)prepareForReuse {
[super prepareForReuse];
[self addAnimation];
}
- (void)addAnimation {
// remove previous animations
[drop removeAllAnimations];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(32, 64 + 6)];
animation.duration = 0.75;
animation.repeatCount = HUGE_VALF;
animation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseIn];
[drop addAnimation:animation forKey:@"position"];
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
1222 次 |
| 最近记录: |