Iphone 如何在程序中插入一个UIView(在启动期间),该UIView将用于核心动画?

Iphone 如何在程序中插入一个UIView(在启动期间),该UIView将用于核心动画?,iphone,uiimageview,core-animation,calayer,exc-bad-access,Iphone,Uiimageview,Core Animation,Calayer,Exc Bad Access,我有一个用于iPhone/iPod的基于视图的应用程序,可以播放音频,有一个VU表显示输入的dB级别。此VU表使用核心动画设置动画 该应用程序运行良好,VU表工作良好,只有一个视图。但现在,不幸的是,我已经插入了一个选项卡栏控制器,以拥有另一个包含一些互联网内容的视图,我无法像以前一样让VU表在我的第一个视图上工作 由于UIView(包含用于核心动画的VU meter.png文件)在启动时没有像以前作为仅视图应用程序那样正确插入,应用程序崩溃(接收到EXC_BAD_ACCESS消息) 这是我的代

我有一个用于iPhone/iPod的基于视图的应用程序,可以播放音频,有一个VU表显示输入的dB级别。此VU表使用核心动画设置动画

该应用程序运行良好,VU表工作良好,只有一个视图。但现在,不幸的是,我已经插入了一个选项卡栏控制器,以拥有另一个包含一些互联网内容的视图,我无法像以前一样让VU表在我的第一个视图上工作

由于UIView(包含用于核心动画的VU meter.png文件)在启动时没有像以前作为仅视图应用程序那样正确插入,应用程序崩溃(接收到EXC_BAD_ACCESS消息)

这是我的代码,在myAppDelegate.m文件中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

}

这是我的playervcontroller.m文件,在这里我有addBargraphToView方法,其中包含要插入的图像。在VU表开始工作之前,它一直不可见:

- (void) addBargraphToView: (UIView *) parentView {

// static image for showing average level
UIImage *soundbarImage      = [[UIImage imageNamed: @"vu-meter.png"] retain];


// background colors for generated image for showing peak level
self.peakClear              = [UIColor clearColor]; 
self.peakGray               = [UIColor lightGrayColor];  
self.peakOrange             = [UIColor orangeColor];  
self.peakRed                = [UIColor redColor];  

levelMeter                  = [CALayer layer];
levelMeter.anchorPoint      = CGPointMake (0.0, 20.0);                      // anchor to halfway up the left edge
levelMeter.frame            = CGRectMake (15, 200, 0, kLevelMeterHeight);   // set width to 0 to start to completely hide the bar graph segements
levelMeter.contents         = (UIImage *) soundbarImage.CGImage;

peakLevelMeter              = [CALayer layer];
peakLevelMeter.frame        = CGRectMake (41, 233, 0, kLevelMeterHeight);
peakLevelMeter.anchorPoint  = CGPointMake (0.5, 10.0);
peakLevelMeter.backgroundColor = peakGray.CGColor;

peakLevelMeter.bounds       = CGRectMake (0, 0, 0, kLevelMeterHeight);
peakLevelMeter.contentsRect = CGRectMake (0, 0, 1.0, 1.0);

[parentView.layer addSublayer: levelMeter];
[parentView.layer addSublayer: peakLevelMeter];

[soundbarImage release];
}

我怎样才能解决这个问题?我是否应该在其他点插入UIView映像,而不是在应用程序启动时插入

亲爱的朋友们,非常感谢你们的帮助

移动此呼叫:

[self.viewController addBargraphToView: controllerView];
要在PlayerServiceController实现中-viewDidLoad,请执行以下操作:

- (void) viewDidLoad 
{
    [super viewDidLoad];
    [self addBargraphToView: self.view];
}
编辑

好的,我认为问题在于双重添加视图控制器。将其作为应用程序的内容:didFinishLaunchingWithOptions:方法:

PlayerViewController *newController = [[PlayerViewController  alloc] initWithNibName: @"PlayerView"
                                                                        bundle: [NSBundle mainBundle]]; 
self.viewController = newController;
[newController release];

self.tabBarController.viewControllers = [NSArray arrayWithObjects: newController, yourInterntContenViewController, nil];

[self.window addSubview: self.tabBarController.view];
[self.window makeKeyAndVisible];

return YES;

嗨,巴托斯,谢谢你的回答!但该应用程序仍然会因EXC\u坏访问而崩溃。我认为self.window.rootViewController=self.tabBarController行覆盖了视图上的任何进一步调用,因为当它不在那里时,VU表工作,但选项卡栏不显示。你还有其他建议吗?亲爱的巴托斯,现在多亏了你,我的屏幕底部显示了TabBar,没有崩溃,VU表正常工作。现在还有一个问题:第二个视图中的互联网内容属于UINavigationController类,不再推动web浏览器。我该怎么做才能使它再次正常工作?非常感谢!真的很难说没有看到代码,我的玻璃球最近被恶魔撞坏了;(让我们尝试修复玻璃球…哈哈…我想我已经在MainWindow.xib上设置的TaBarController不是在myAppDelegate.m文件中调用的。正如我所看到的,当我们在myAppDelegate.m上分配和初始化PlayerViewController时,它位于我已经制作好的TaBarController之上。我知道这很模糊,但这是什么e代码想仔细看看吗?实际上一切都很好,因为我们自己明确地设置了ViewController,所以很明显,从.xib加载的所有属性都消失了。在我看来,由于改变了对应用程序的主视图控制器的看法,您可能会遇到一些混乱。下面是我的建议on:创建一个新项目,基于UITabBarNavigationController的项目,并在.xib中设置控制器。您可以重用99%的代码,这样就可以避免现在出现的问题。这对我来说似乎是合理的,因为没有人会为您修复整个程序;)
PlayerViewController *newController = [[PlayerViewController  alloc] initWithNibName: @"PlayerView"
                                                                        bundle: [NSBundle mainBundle]]; 
self.viewController = newController;
[newController release];

self.tabBarController.viewControllers = [NSArray arrayWithObjects: newController, yourInterntContenViewController, nil];

[self.window addSubview: self.tabBarController.view];
[self.window makeKeyAndVisible];

return YES;