swift 使用 uiswipegesturerecognizer 更新 uitableviewcell 的框架
swift update frame of uitableviewcell with uiswipegesturerecognizer
我在我的 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")
}
}
您可以通过子classing UIPanGestureRecognizer 轻松地做您想做的事。但是不要。不要添加手势识别器,而是将您的单元格变成 UIScrollView。现在您可以设置它的 contentSize
和边界原点,以便它只能从左向右滚动。这里的优点是您使用的是内置界面 class,可以自动拖动。如果需要,您可以使用委托方法来跟踪用户的操作。
我在以前的项目中实现了自定义单元格滑动...您需要将这些东西设置为动画,使其看起来与在通知绘制消息滑动中工作的滑动完全一样。我可以在 Objective-C 中给你片段。您应该能够轻松地将其翻译成 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
}];
}
}
我在我的 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")
}
}
您可以通过子classing UIPanGestureRecognizer 轻松地做您想做的事。但是不要。不要添加手势识别器,而是将您的单元格变成 UIScrollView。现在您可以设置它的 contentSize
和边界原点,以便它只能从左向右滚动。这里的优点是您使用的是内置界面 class,可以自动拖动。如果需要,您可以使用委托方法来跟踪用户的操作。
我在以前的项目中实现了自定义单元格滑动...您需要将这些东西设置为动画,使其看起来与在通知绘制消息滑动中工作的滑动完全一样。我可以在 Objective-C 中给你片段。您应该能够轻松地将其翻译成 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
}];
}
}