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