使用 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有三种方式(不使用,动态使用,静态使用,默认是动态使用)