0

そこで、デバイスを振ると音が鳴るプログラムを作成しました。タップするといつでもサウンドの再生を停止するボタンがあります (これは「リセット」メソッドです)。別のボタンがあり、押すと別のビューが表示されます (これは「infoView」メソッドです)。「infoView」に移動してから最初のビューに戻ると、問題が発生します。デバイスを振ると音は鳴りますが、「リセット」ボタンは反応しなくなります。ここに私がこれまでに持っているものがあります。

PS。FirstResponders と何か関係があるのでしょうか? 私はまだ FirstResponders に頭を悩ませようとしています。

.h

#import <UIKit/UIKit.h>
#import "AVfoundation/AVfoundation.h"

@interface OldTvViewController : UIViewController{
AVAudioPlayer *audioPlayer;
}
-(IBAction)reset;
-(IBAction)infoView:(id)sender;
@end

彼ら

#import "OldTvViewController.h"
#import "AudioToolBox/AudioToolBox.h"
#import "infoViewController.h"

@implementation OldTvViewController

-(IBAction)infoView:(id)sender{
infoViewController *second = [[infoViewController alloc] initWithNibName:Nil bundle:Nil];
[self presentModalViewController:second animated:YES];
[second release];
}

-(BOOL) canBecomeFirstResponder{
return YES;
}

-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{

if (event.subtype == UIEventSubtypeMotionShake) {

    //Play throw sound
    if(audioPlayer.playing){
        [audioPlayer stop];
    } else{
        NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/bomb.mp3",[[NSBundle mainBundle] resourcePath]]];
        NSError *error;
        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
        audioPlayer.numberOfLoops = 0; 
        [audioPlayer play];    
    }

}

}


-(IBAction)reset{
[audioPlayer stop];
}


-(void)viewDidAppear:(BOOL)animated{
[self becomeFirstResponder];
[super viewDidAppear:animated];
}

- (void)viewDidLoad
{
[super viewDidLoad];
}

@end
4

1 に答える 1

1

情報ビューに移動すると、そのクラスですべてのボタンを使用できる場所で、このコードを試します。

-(void)viewWillDisapeers
 {

  [audioPlayer stop];

 }

またはこのメソッドを追加します

-(IBAction)infoView:(id)sender
 {
 infoViewController *second = [[infoViewController alloc] initWithNibName:Nil bundle:Nil];
 [self presentModalViewController:second animated:YES];
 [audioPlayer stop];
 [second release];
 }
于 2012-05-04T04:22:05.007 に答える