Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为对象创建边界_Ios_Objective C - Fatal编程技术网

Ios 为对象创建边界

Ios 为对象创建边界,ios,objective-c,Ios,Objective C,我对objective-c和iOS在Xcode中的编程相当陌生,在制作我的第一个应用程序时,我遇到了在屏幕边缘制造障碍物的问题,而物体无法通过。我尝试在边界处放置对象并使用CGRectIntersectsRect,但边界与主对象之间的碰撞未注册。有人知道我会怎么做吗 这是我用于对象移动的代码: const float rate= 0.025; NSTimer *goLeft; NSTimer *goRight; - (IBAction)right { goRight=[NSTimer

我对objective-c和iOS在Xcode中的编程相当陌生,在制作我的第一个应用程序时,我遇到了在屏幕边缘制造障碍物的问题,而物体无法通过。我尝试在边界处放置对象并使用CGRectIntersectsRect,但边界与主对象之间的碰撞未注册。有人知道我会怎么做吗

这是我用于对象移动的代码:

const float rate= 0.025;
NSTimer *goLeft;
NSTimer *goRight;

- (IBAction)right {

    goRight=[NSTimer scheduledTimerWithTimeInterval:rate
                                            target:self
                                          selector:@selector(goRight)
                                          userInfo:nil
                                           repeats:YES];
    if (goRight == nil){
        goRight=[NSTimer scheduledTimerWithTimeInterval:rate target:self selector:@selector(goRight) userInfo:nil repeats:YES];
    }




}



- (IBAction)left{


    goLeft=[NSTimer scheduledTimerWithTimeInterval:rate
                                           target:self
                                         selector:@selector(goLeft)
                                         userInfo:nil
                                          repeats:YES];
    if (goLeft == nil){
        goLeft=[NSTimer scheduledTimerWithTimeInterval:rate target:self selector:@selector(goLeft) userInfo:nil repeats:YES];
    }


}

-(IBAction)stopLeft{
    [goLeft invalidate];
    goLeft=nil;
}


-(IBAction)stopRight{
    [goRight invalidate];
    goRight=nil;
}

-(void)goLeft{
    _userToken.center =CGPointMake(_userToken.center.x -20, _userToken.center.y);
}

-(void)goRight{
    _userToken.center =CGPointMake(_userToken.center.x +20, _userToken.center.y);

}
以及用于与左边框处的对象发生碰撞(userToken和friendly都是UIImageView)。但是,当它们发生冲突时,不会执行NSLog

 -(void)checkForCollision{
        if (CGRectIntersectsRect(_userToken.frame, _friendly.frame)){
            NSLog(@"Left Intersect");

        }
    }

测试时,您不会说将
\u userToken.frame
\u-friendly.frame
设置为什么-最好在测试时记录它们,以便手动验证

如果有效屏幕区域为rect,另一种方法是检查令牌和有效区域的交点,并验证其是否等于令牌帧:

if (CGRectEqualToRect(CGRectIntersection(_userToken.frame, validFrame), _userToken.frame)) { ...
当通过任何方法检查帧是否位于同一坐标空间(视图是否具有相同的superview,或者是否将其转换为相同的公共superview)时,这一点非常重要。同样,日志记录将帮助您验证这一点

旁白:


如果计时器刚刚失败,尝试重新创建它不太可能有帮助。在创建新计时器之前,您应该检查现有计时器并使其失效(否则,您可能会导致多个计时器运行,并且无法停止它们)。

提供有关对象是什么以及它们如何移动的更多上下文。显示您迄今为止尝试过的代码。添加到问题中的代码冲突部分工作得很好,但是我如何阻止多个计时器运行?您只能停止您有引用的计时器,因此如果您失去该引用,则无法停止它。