2009-12-10 6 views
0

в основном всякий раз, когда я воспроизвожу звук, когда анимация замедляется или приостанавливается, что делать ???помощь! при воспроизведении звука анимация замораживает приостанавливает

размер звука 20кб mp3.

анимация размер 5kb png.

код:

- (void) startAnimation { 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.8]; 
CGPoint destination = CGPointMake(152,20); 
pink.center = destination; 
[UIView commitAnimations]; 
[soundPink play];  
} 


- (void) initSoundResources { 

soundPink = [[APlayer alloc] initWithFile:@"pink" type:@"mp3"]; 
soundPink = 0.4; 
} 

ответ

2

Edit:

Я только заметил, что в initSoundResources, вы alloc'ing и init'ing объект APlayer, но затем назначая всплывают на указатель сразу после этого. Я почти уверен, что это не то, что вы намереваетесь.


Попробуйте это:

- (void) startAnimation { 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.8]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(playSound)]; 
    CGPoint destination = CGPointMake(152,20); 
    pink.center = destination; 
    [UIView commitAnimations]; 
} 


- (void) initSoundResources { 
    soundPink = [[APlayer alloc] initWithFile:@"pink" type:@"mp3"]; 
    soundPink = 0.4; 
} 


- (void) playSound { 
    //assuming initSoundResources is called at some point before this... 
    [soundPink play]; 
} 

Идея заключается в том, что UIView анимации асинхронно. Если анимация установлена ​​на 0,8 секунды, это не означает, что код займет 0,8 секунды.

Что я имею в виду, так это то, что код сразу после того, как код анимации UIView будет вызван эффективно сразу после кода анимации. В этом случае звук будет играть (возможно) до начала анимации.

Я не могу себе представить, почему это будет приостановлено или заморожено, но использование этого метода должно работать.

В моем коде я принял предположение, что в какой-то момент вызывается метод initSoundResources, прежде чем пытаться воспроизвести звук.

Если указатель soundPink не инициализирован нулем или действительным звуковым экземпляром, то отправка его сообщения воспроизведения может привести к сбою.

+0

первый раз спасибо! Мне нужно что-то изменить в моем методе initSoundResources? Я просто синтезирую soundPink, мне нужно что-то сделать? как это [UIViewsetAnimationDidStopSelector: @selector (playSound)]; если мне нужно таймер звука? [NSTimer scheduleTimerWithTimeInterval: 1.8 target: self selector: @selector (playSound) userInfo: nil repeatts: false]; – nil

+0

Код, который я вам дал, должен работать только в отношении делегата UIViewAnimation и didStopSelector. Что касается ваших initSoundResources, вам не нужно назначать поплавок указателю soundPink. Разумеется, компилятор должен предупредить вас об этом, разве вы этого не видели? – Jasarien

+0

Я не видел никакого предупреждения, что вы имеете в виду, назначив поплавок? – nil