0

私は xCode を使い始めて以来、ストーリーボードを使用しています。今日、私は xib ファイルで古い方法を試しています。

最初のビューには、2 番目のビューにいるときもアクティブな加速度計コードがあります。

2 番目のビュー コントローラーが最初のビューのコードを使用しないようにする方法はありますか?

2 番目のビューのヘッダー ファイルを最初のビューの実装ファイルにインポートしていますが、それは正しいですか? そのインポートを削除すると、エラーが発生します。

//
//  ViewController.m



#import "ViewController.h"
#import "ViewController2.h"

@interface ViewController ()

@end

@implementation ViewController



- (void)viewDidLoad
{

    [super viewDidLoad];

}

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

-(void)viewWillAppear:(BOOL)animated{
    [self startAccel];
    //[self view];

}

-(void)viewWillDisappear:(BOOL)animated{
    [self stopAccel];
    //[self view];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    {

    return ((interfaceOrientation == UIInterfaceOrientationPortrait) || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown));

}



-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{

    double const kThreshold = 1.7;
//    double const kThreshold = 2.0;
    if ( fabsf(acceleration.x) > kThreshold
        || fabsf(acceleration.y) > kThreshold
        || fabsf(acceleration.z) > kThreshold){


        int randomNumber = arc4random() % 3 + 1;

        NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"Sound%02d", randomNumber] ofType:@"wav"]];

        AVAudioPlayer * soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil];

        [soundPlayer prepareToPlay];
        [soundPlayer play];

    }
}


-(void)startAccel{
    UIAccelerometer * accel = [UIAccelerometer sharedAccelerometer];
    accel.delegate = self;
    accel.updateInterval = .25;
}

-(void)stopAccel{
    UIAccelerometer * accel = [UIAccelerometer sharedAccelerometer];
    accel.delegate = nil;
}




-(IBAction)View2:(id)sender;{
    ViewController2 *V2 = [[ViewController2 alloc]
                                              initWithNibName:@"ViewController2"
                                              bundle:nil];

    [self.view addSubview:V2.view];
}


@end
4

1 に答える 1

1

2 番目のコントローラーは最初のコントローラーのコードを実際には使用しませんが、最初のビューを表示しているときに startAccelerometerUpdates を呼び出した場合は、2 番目のビューを表示しようとしているときにそれらを停止する必要がある場合があります。

于 2012-04-07T00:50:21.467 に答える