我正在尝试在UITableViewCell子类中为图像设置动画。当电池上的水龙头持续时间约为1/2秒或更长时,它可以工作。对于较短的点击,单元格会被选中,但我的动画不会运行。
在我的视图控制器中,我有:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
ImageCell *cell = (ImageCell*)[tableView cellForRowAtIndexPath:indexPath];
cell.imageFlashDuration = 5.0;
cell.imageFlashNumberOfFrames = 25;
NSLog(@"Flash image...");
[cell flashImage];
[self performSelector:@selector(doSomething:) withObject:video afterDelay:5.0];
}
在我的ImageCell中:
-(void)flashImage {
UIImage *image = imageView.image;
if(imageView.isAnimating) {
NSLog(@"Stop animating");
[imageView stopAnimating];
}
NSMutableArray *animationArray = [NSMutableArray arrayWithCapacity:imageFlashNumberOfFrames];
for(int i=0; i<imageFlashNumberOfFrames; i++) {
[animationArray addObject:(i % 2 == 0? black60x60Image : image)];
}
imageView.animationImages = animationArray;
imageView.animationDuration = imageFlashDuration;
NSLog(@"> Start animating");
[imageView startAnimating];
}
在我的日志中,我看到了
2009-07-02 22:02:55.907 MyProg [1797:20b] Flash图片......
2009-07-02 22:02:55.912 MyProg [1797:20b]&gt;开始制作动画
2009-07-02 22:02:59.455 MyProg [1797:20b] Flash图像......
2009-07-02 22:02:59.460 MyProg [1797:20b]&gt;开始制作动画
2009-07-02 22:03:02.463 MyProg [1797:20b] Flash图片......
2009-07-02 22:03:02.468 MyProg [1797:20b]&gt;开始制作动画
2009-07-02 22:03:05.009 MyProg [1797:20b] Flash图片......
2009-07-02 22:03:05.014 MyProg [1797:20b]&gt;开始制作动画
以上是“短”和“长”的混合。长时间的触摸导致细胞选择和图像动画,短的触摸导致细胞选择而没有动画。
此外,如果短暂点击后单击另一个短按,则动画开始。
答案 0 :(得分:0)
我认为问题在于didSelectRowAtIndexPath方法。在那里你调用cellForRowAtIndexPath方法,它可能不会返回被点击的同一个单元格!返回的单元格可能是一个新的单元格,在屏幕上看不到,上面有动画图像。但是......它不可见。
我假设您使用其他方法处理较长的点击次数(不是didSelectRowAtIndexPath)?
在cellForRowAtIndexPath方法中,您应该在tableview本身(或为其指定标记)请求单元格的位置保留对单元格的引用。然后当didSelectRowAtIndexPath方法时,查找该单元格的特定实例(通过引用,或通过标记,...)
希望这会有所帮助:)干杯