实现UILongPressGesture

实现UILongPressGesture

我正在尝试在我的一张桌子上实现UILongPressGesture以便能够对其单元进行重新排序。但是,每次我长按我的应用程序都会崩溃。

这是实现UILongPressGesture的文件:

#import "LstrTableViewDragToMove.h"
#import "LstrTableViewCell.h"

@implementation LstrTableViewDragToMove
{
    LstrTableView *_tableView;
    BOOL _dragInProgress;
    CGPoint _initialTouchPoint;
    int _cellIndex;
    LstrTableViewCell *_currentCell;

}

-(id)initWithTableView:(LstrTableView *)tableView
{
    self = [super init];
    if(self)
    {
        _tableView = tableView;
        UIGestureRecognizer *recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
        [_tableView addGestureRecognizer:recognizer];
    }

    return self;

}

-(BOOL) viewContainsPoint:(UIView*)view withPoint:(CGPoint)point {
    CGRect frame = view.frame;
    return (frame.origin.y < point.y) && (frame.origin.y + frame.size.height) > point.y;
}

-(void)handleLongPress:(UILongPressGestureRecognizer *)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateBegan) {
        [self longPressStarted:recognizer];
    }

    if (recognizer.state == UIGestureRecognizerStateEnded) {
        [self longPressEnded:recognizer];
    }
}

-(void)longPressStarted:(UILongPressGestureRecognizer *)recognizer
{
    NSLog(@"Started");
    /*
    _initialTouchPoint = [recognizer locationOfTouch:0 inView:_tableView.scrollView];
    NSArray* visibleCells = _tableView.visibleCells;
    for (int i=0; i < visibleCells.count; i++) {
        UIView* cell = (UIView*)visibleCells[i];
        if ([self viewContainsPoint:cell withPoint:_initialTouchPoint]) {
            _cellIndex = i;
        }
    }

    _currentCell = _tableView.visibleCells[_cellIndex];
    _currentCell.label.allowsEditingTextAttributes = NO;
    _currentCell.frame = CGRectMake(_currentCell.frame.origin.x, _currentCell.frame.origin.y, _currentCell.frame.size.width + 10.0f, _currentCell.frame.size.height + 10.0f);
    [_currentCell addDropShadow];
     */
}


-(void)longPressEnded:(UILongPressGestureRecognizer *)recognizer
{
    NSLog(@"Ended");
}

@end


这是错误日志:

2013-05-03 13:17:53.750 Lstr[19207:907] -[UILongPressGestureRecognizer translationInView:]: unrecognized selector sent to instance 0x20856240
2013-05-03 13:17:53.754 Lstr[19207:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILongPressGestureRecognizer translationInView:]: unrecognized selector sent to instance 0x20856240'
*** First throw call stack:
(0x3302a2a3 0x3ad5297f 0x3302de07 0x3302c531 0x3302d938 0x6db43 0x34f4f1ab 0x34f1863f 0x34f482a5 0x33941f53 0x32fff5df 0x32fff291 0x32ffdf01 0x32f70ebd 0x32f70d49 0x36b492eb 0x34e86301 0x66775 0x3b189b20)
libc++abi.dylib: terminate called throwing an exception
(lldb)


提前致谢。

更新:

这是具有translationInView的方法:

#pragma mark - horizontal pan gesture methods
-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
    CGPoint translation = [gestureRecognizer translationInView:[self superview]];
    // Check for horizontal gesture
    if (fabsf(translation.x) > fabsf(translation.y)) {
        return YES;
    }
    return NO;
}

最佳答案

您在代码中的某处使用translationInView吗?

您应该将其更改为locationInView

10-08 06:06