UITableViewCell - 根据触摸持续时间的不同行为?

时间:2009-07-02 21:10:05

标签: iphone animation uitableview image-manipulation

我正在尝试在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;开始制作动画

以上是“短”和“长”的混合。长时间的触摸导致细胞选择和图像动画,短的触摸导致细胞选择而没有动画。

此外,如果短暂点击后单击另一个短按,则动画开始。

1 个答案:

答案 0 :(得分:0)

我认为问题在于didSelectRowAtIndexPath方法。在那里你调用cellForRowAtIndexPath方法,它可能不会返回被点击的同一个单元格!返回的单元格可能是一个新的单元格,在屏幕上看不到,上面有动画图像。但是......它不可见。

我假设您使用其他方法处理较长的点击次数(不是didSelectRowAtIndexPath)?

在cellForRowAtIndexPath方法中,您应该在tableview本身(或为其指定标记)请求单元格的位置保留对单元格的引用。然后当didSelectRowAtIndexPath方法时,查找该单元格的特定实例(通过引用,或通过标记,...)

希望这会有所帮助:)干杯