【问题标题】:Implement Swipe and Tap together in a UIView在 UIView 中同时实现 Swipe 和 Tap
【发布时间】:2010-10-14 20:12:48
【问题描述】:

我希望我的 UIImageView 能够同时检测 Tap 和 Swipe 手势。我已经编写了用于 Swipe 检测的 touchesBegan 方法,我只是想知道如何让我的 ImageView 检测到这两种手势。

如何编写 touchesBegan 代码以便它可以同时处理它们?

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if ([touches count] != 1)
    return;

floatSwipeStartX = [[touches anyObject] locationInView:self.view].x;
floatSwipeStartY = [[touches anyObject] locationInView:self.view].y;

intSwipeDirection = 0;

isSwiping = YES;

viewUp.hidden = NO;
viewLeft.hidden = NO;
viewCurrent.hidden = NO;
viewRight.hidden = NO;
viewDown.hidden = NO;

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if (!isSwiping || [touches count] != 1){
    return;
}
CGFloat swipeDistanceX = [[touches anyObject] locationInView:self.view].x - floatSwipeStartX;
CGFloat swipeDistanceY = [[touches anyObject] locationInView:self.view].y - floatSwipeStartY;

CGSize contentSize = [self setContentSize];

if (! intSwipeDirection) {

    if (abs(swipeDistanceX) > abs(swipeDistanceY)) { // swipe left or right
        intSwipeDirection = SWIPE_DIRECTION_HORIZONTAL;
    } else {
        intSwipeDirection = SWIPE_DIRECTION_VERTICAL;
    }

}

if (intSwipeDirection == SWIPE_DIRECTION_HORIZONTAL) {
    viewLeft.frame = CGRectMake(swipeDistanceX - contentSize.width, 0.0f, contentSize.width, contentSize.height);
    viewCurrent.frame = CGRectMake(swipeDistanceX, 0.0f, contentSize.width, contentSize.height);
    viewRight.frame = CGRectMake(swipeDistanceX + contentSize.width, 0.0f, contentSize.width, contentSize.height);
} else {
    viewUp.frame = CGRectMake(0.0f, swipeDistanceY - contentSize.height, contentSize.width, contentSize.height);
    viewCurrent.frame = CGRectMake(0.0f, swipeDistanceY, contentSize.width, contentSize.height);
    viewDown.frame = CGRectMake(0.0f, swipeDistanceY + contentSize.height, contentSize.width, contentSize.height);
}

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

CGFloat swipeDistanceX = [[touches anyObject] locationInView:self.view].x - floatSwipeStartX;
CGFloat swipeDistanceY = [[touches anyObject] locationInView:self.view].y - floatSwipeStartY;

if (! isSwiping || (swipeDistanceX == 0 && swipeDistanceY == 0)) {

    //[self updateViews];

    return;
}

if (intSwipeDirection == SWIPE_DIRECTION_HORIZONTAL) {

    if (swipeDistanceX > 50.0f) {
        intNewDirection = SWIPE_TO_THE_RIGHT;
        intCurrentView = intCurrentLeft;
    } else if (swipeDistanceX < -50.0f) {
        intNewDirection = SWIPE_TO_THE_LEFT;
        intCurrentView = intCurrentRight;
    }

} else { // vertical


    if (swipeDistanceY > 50.0f) {
        intNewDirection = SWIPE_TO_THE_UP;
        intCurrentView = intCurrentUp;
    } else if (swipeDistanceY < -50.0f) {
        intNewDirection = SWIPE_TO_THE_DOWN;
        intCurrentView = intCurrentDown;
    }

}

[self updateViews];

isSwiping = NO;

}

请指导我在哪里插入点击手势的代码。我正在使用模拟器 3.2

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    如果您使用的是 sdk 3.2 或更高版本,使用 UIGestureRecognizer 类非常容易。

    否则,我会检查手指在触摸开始和触摸结束之间的移动量,如果移动很小,则将手势称为轻击,如果移动很大,则称为滑动。

    【讨论】:

    • 非常感谢老兄......它工作...... :) 我在 if 块中插入了我必须执行的操作.. if (!isSwiping || (swipeDistanceX == 0 && swipeDistanceY == 0)) { }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多