1

现在我的代码是一个应用程序委托、一个视图控制器和一个主视图现在我只是想插入一个大图像作为背景,但我不知道把它放在哪里,我得到了一个运行模拟时出错

 <Error>: CGContextRestoreGState: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context  and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.


- (void) applicationDidBecomeActive: (UIApplication *) application {
    NSLog(@"AAAAAAAAAA");
    [self startGameLoop];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"AAAAA");
    mainView = [[MainView alloc] initWithFrame: [UIScreen mainScreen].applicationFrame];
    mainView.backgroundColor = [UIColor grayColor];
    [self.window addSubview: mainView];
    [self.window makeKeyAndVisible];
    [self startGameLoop];
    return YES;
}



    - (void) startGameLoop {
    quack = [NSTimer scheduledTimerWithTimeInterval:.0303 target:self selector:@selector(loop)       userInfo:nil repeats:YES];
    NSLog(@"Game Loop timer instance: %@", quack);
    mainView.backgroundColor = [UIColor grayColor];
}

- (void) loop {
    NSLog(@"BBBBBB");
    pic = [UIImage imageNamed:@"f1.png"];
    [pic drawAtPoint:CGPointMake(160, 0)];
    [mainView setNeedsDisplay];

}

- (void) drawRect: (CGRect) rect {
    maps = [UIImage imageNamed:@"map.png"];
    [maps drawAtPoint:CGPointMake(W/2, 0)];

}
4

1 回答 1

0

您正在调用一个在图形上下文之外需要“当前”图形上下文的方法( [pic drawAtPoint:] )。UIKit 在调用 drawRect: 之前自动在幕后创建一个。

此外,您的 drawRect 必须在 MainView 类中,而不是在 UIApplicationDelegate 中。

尝试从循环内删除 [pic drawAtPoint:CGPointMake(160,0)]。如果要在每个循环中绘制它,则必须在 MainView 类的 drawRect 方法中完成。

另外,您提到您正在使用视图控制器,但我在您的代码中没有看到任何引用。

但如果您只想移动图像,您可能需要考虑不调用 setNeedsDisplay。相反,创建一个 UIImageView,将其添加到您的视图中,并在循环方法中设置其中心属性。

于 2013-12-07T05:46:41.217 回答