使用调试版本时,我的程序在 iPhone 模拟器和 iPhone 本身上都按照我希望的方式工作。但是,当我将其更改为发布版本时,它可以在 iPhone 模拟器上运行,但不能在设备上运行。我正在尝试使用计时器在屏幕上为球设置动画,如果球与屏幕边缘碰撞,球应该从侧面反弹。这适用于调试版本,但发布版本仅适用于模拟器而不是设备。球甚至不会在发布版本的设备上移动。
我觉得这与从调试切换到发布版本时更改的优化级别有关。如果这是真的,我该如何更改我的代码以更好地适应优化级别?
视图控制器使用 initWithNibName: 调用,其中包含:
CGRect ballRect = CGRectMake(133, 424, 55, 56);
newBall = [[Ball alloc] initWithFrame: ballRect];
[self.view addSubview: newBall];
[self setImage: [UIImage imageNamed: @"Red.png"]];
Ball *newBall 在接口文件中声明。球在屏幕上正确显示,所有构建上的图像都正确。
当用户点击屏幕时,将调用移动球的计时器:
-(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event{
touch = [touches anyObject];
touchPoint = [touch locationInView: self.view];
dx = touchPoint.x - newBall.center.x;
dy = touchPoint.y - newBall.center.y;
newBallTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0/50.0 target: self selector: @selector(moveBall) userInfo: nil repeats: YES];
}
CGPoint touchPoint、UITouch *touch、float dx、float dy 和 NSTimer *newBallTimer 也在接口文件中声明。
这是我移动球和检测碰撞的代码:
-(void) moveBall
{
newBall.center = CGPointMake( newBall.center.x + dx, newBall.center.y + dy );
// left boundary
if( newBall.frame.origin.x <= 20 )
{
dx = abs(dx);
}
else if( newBall.center.x >= 280 )
{
dx = -abs(dx);
}
}
在设备上发布版本时,球不会移动。相反,它似乎被发送到屏幕底部并停留在那里。
任何建议/解决方案/想法都将受到高度赞赏。提前致谢!