Как вставить UIView (во время запуска), который будет использоваться для основной анимации после в программе? - PullRequest
0 голосов
/ 30 марта 2011

У меня есть приложение View для iPhone / iPod, которое воспроизводит звук, с VU-метром, показывающим уровень входного дБ. Этот измеритель громкости анимирован с помощью Core Animation.

Приложение работает нормально, с VU-метром, работающим отлично, имея только один вид. Но теперь, к сожалению, после того, как я вставил контроллер панели вкладок, чтобы иметь другой вид с некоторым интернет-контентом, я не могу заставить измеритель VU работать на моем первом виде, как раньше.

Приложение аварийно завершает работу (получает сообщение EXC_BAD_ACCESS ), поскольку UIView (который содержит файл .png VU meter для базовой анимации) не вставляется должным образом во время запуска, как это было раньше в качестве только просмотра. применение.

Вот мой код в файле myAppDelegate.m :

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

{

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

UIView *controllerView = [self.viewController view]; 
[self.window addSubview: controllerView];
[self.viewController addBargraphToView: controllerView];
[self.window makeKeyAndVisible]; 


 self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];

return YES;

}

А вот мой PlayerViewController.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 в какой-то другой точке, а не во время запуска приложения?

Большое спасибо за помощь, дорогие друзья!

1 Ответ

0 голосов
/ 30 марта 2011

Переместить этот вызов:

[self.viewController addBargraphToView: controllerView];

К -viewDidLoad внутри вашей реализации PlayerViewController:

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

Редактировать

ОК, я думаю, что проблема заключается в двойном добавлении viewControllers. Сделайте это содержимым вашего приложения: didFinishLaunchingWithOptions: method:

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;
...