2012-04-07 9 views
0

Ich verwende seit der Verwendung von xCode Storyboards. Heute habe ich den alten Weg mit Xib-Dateien ausprobiert.Xib-Ansichten wechseln, ohne Befehle vom vorherigen Bildschirm zu übertragen

Meine erste Ansicht hat einen Beschleunigungssensor-Code, der immer noch aktiv ist, wenn ich auf der zweiten Ansicht bin.

Gibt es einen Weg zu Stop der zweite View-Controller von Code aus der ersten Ansicht verwenden?

Ich importiere die Header-Datei der zweiten Ansichten in die erste Views-Implementierungsdatei, ist das korrekt? Wenn ich diesen Import entferne, erhalte ich Fehler.

// 
// 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 

Antwort

1

Der zweite Controller ist nicht wirklich Verwendung Code aus dem ersten, aber wenn Sie startAccelerometerUpdates genannt, während Sie Ihre ersten Blick wurden angezeigt wird, möchten Sie vielleicht, sie zu stoppen, wie Sie dabei, den zweiten zu präsentieren wenn es sie nicht braucht.

+0

Ich habe den Quellcode zur ursprünglichen Frage oben hinzugefügt. Kannst du etwas sehen, was ich falsch mache, damit dieser Beschleunigungssensor auf dem nächsten View-Controller verwendet wird? – sdlabs

+0

Abgesehen von der Tatsache, dass Sie laut den Dokumenten '' super viewWillAppear: animated] 'und' [super viewWillDisappear: animated] 'nennen sollten, springt nichts heraus. Ich denke nicht ** das würde dieses Problem verursachen (aber ich bin mir nicht sicher). Ich wäre versucht, NSLog() -Nachrichten in startAccel und stopAccel zu schreiben, um sicherzustellen, dass sie aufgerufen wurden, als ich dachte, dass sie waren. –

Verwandte Themen