继续推动2个视图控制器

时间:2014-06-25 02:45:09

标签: ios objective-c uiimageview frame touches

在我的应用设置中,我有一个带有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;
    }
}

2 个答案:

答案 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,你应该好好去:)

这应该足以提示您解决问题,但如果您想要更多说明,请告诉我。