【发布时间】: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