在我的应用设置中,我有一个带有4个ImageView的导航控制器。其中1个可以拖动,而其他3个静止在视图的顶部。使用下面的代码,我设置它,以便用户将一个图像视图拖动到他想去的图像视图。因此,为了进入视图1,他将可移动图像视图拖动到图像视图1,依此类推。问题在于,使用图像视图的宽度,选择器视图可以一次触摸两个,这会产生嵌套视图控制器问题。有没有办法可以防止这种情况发生,除了将图像视图移动得太远以至于不可能一次选择多个图像视图?
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
// If the touch was in the placardView, move the placardView to its location
if ([touch view] == clock) {
CGPoint location = [touch locationInView:self.tabBarController.view];
clock.center = location;
BOOL isIntersecting = CGRectIntersectsRect(clock.frame, prayer.frame);
BOOL isIntersecting2 = CGRectIntersectsRect(clock.frame, fasting.frame);
BOOL isIntersecting3 = CGRectIntersectsRect(clock.frame, study.frame);
if(isIntersecting){
[self schedulePrayer];
NSLog(@"prayer");
}
if(isIntersecting2){
[self scheduleFasting];
NSLog(@"fasting");
}
if(isIntersecting3){
[self scheduleStudying];
NSLog(@"Studying");
}
return;
}
}
答案 0 :(得分:1)
为什么不使用 if ... else if?else if ?
if(isIntersecting){
[self schedulePrayer];
NSLog(@"prayer");
}
else if(isIntersecting2){
[self scheduleFasting];
NSLog(@"fasting");
}
else if(isIntersecting3){
[self scheduleStudying];
NSLog(@"Studying");
}
然后,一次只会触发一个。
答案 1 :(得分:-1)
创建另一个BOOL" isTouching"并使其全球化。然后在你的if(isIntersecting)集合中#34; isTouching"全球化,并添加" isTouching"作为一个条件:
if ([touch view] == clock && (!isTouching))
如果UIImageView不在任何相交视图上,你还需要将isTouching设置为false,你应该好好去:)
这应该足以提示您解决问题,但如果您想要更多说明,请告诉我。