使用 uiswipegesturerecognizer 快速更新 uitableviewcell 的框架

Posted

技术标签:

【中文标题】使用 uiswipegesturerecognizer 快速更新 uitableviewcell 的框架【英文标题】:swift update frame of uitableviewcell with uiswipegesturerecognizer 【发布时间】:2015-11-11 18:03:16 【问题描述】:

我在我的 tableviewcell 中添加了一个UISwipeGestureRecogniser。现在我想为我的 tableviewcell 添加一个实时幻灯片效果。如果我目前在单元格上滑动,则不会发生任何事情。单元格应该是可滑动的。

我的代码:

var originalCenter = CGPoint()

var rightSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))
rightSwipe.direction = .Right
self.addGestureRecognizer(rightSwipe)

func handleSwipes(recogniser:UISwipeGestureRecognizer) 

    let location : CGPoint = recogniser.locationInView(self)

    if (recogniser.direction == .Right) 

        if recogniser.state == .Began 

            // when the gesture begins, record the current center location
            originalCenter = center
        

        if recogniser.state == .Changed 

            let translation = recogniser.locationInView(self)
            center = CGPointMake(originalCenter.x + translation.x, originalCenter.y)
        

        if recogniser.state == .Ended 

        

        println("Swipe Right")
    

【问题讨论】:

你设置了一个 UIPanGestureRecognizer 但你一直提到刷卡。如果你只需要能够滑动,你可以设置一个 UISwipeGestureRecognizer 并设置它的方向。 我用uiswipegesturerecognizer 更新了我的代码,但我不知道为什么单元格没有改变它的位置。 【参考方案1】:

我在我以前的项目中实现了自定义单元格滑动...您需要为这些东西设置动画,使其看起来与通知绘制消息滑动中的滑动完全相同。我可以在 Objective-C 中给你 sn-p。您应该能够轻松地将其翻译成 swift ;)

-(void)handleLeftCellSwipe:(UISwipeGestureRecognizer *)recognizer
     CGPoint location = [recognizer locationInView:self.localTableView];
     NSIndexPath *swipedIndexPath = [self.localTableView indexPathForRowAtPoint:location];
     UITableViewCell *swipedCell  = [self.localTableView cellForRowAtIndexPath:swipedIndexPath];
     if(swipedCell)
          [UIView animateWithDuration:0.3 delay:0.0 usingSpringWithDamping:0.7 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveEaseIn animations:^
          [swipedCell.contentView setFrame:CGRectMake(swipedCell.contentView.frame.origin.x - 40, swipedCell.contentView.frame.origin.y, swipedCell.contentView.frame.size.width, swipedCell.contentView.frame.size.height)];
           completion:^(BOOL finished)
              // Do whatever you need to do after animation completes
          ];
     

【讨论】:

我拿到了第一部分 (var location = recogniser.locationInView(tableView) var swipedIndexPath = tableView.indexPathForRowAtPoint(location) var swipedCell = tableView.cellForRowAtIndexPath(swipedIndexPath!) as UITableViewCell? ),但不知道如何才能走得更远(我还在学习 Swift)。你能帮我翻译一下第二部分吗?【参考方案2】:

您可以通过继承 UIPanGestureRecognizer 轻松地做您想做的事情。但是不要。无需添加手势识别器,而是将您的单元格转换为 UIScrollView。现在您可以设置它的contentSize 和边界原点,以便它只能从左到右滚动。这里的优点是您使用了一个可以自动拖动的内置接口类。如果需要,您可以使用委托方法来跟踪用户的操作。

【讨论】:

你能看看我更新的问题吗? 你能考虑按我说的做吗?显然,就目前情况而言,牢房不会去任何地方。你没有做任何事情让它移动。但是单元格内滚动视图的可滚动内容可以去某个地方。

以上是关于使用 uiswipegesturerecognizer 快速更新 uitableviewcell 的框架的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份