Ich habe Schwierigkeiten, einen Swipe Gesture Recognizer zu erhalten, der an meiner App funktioniert. Hier ist die Hierarchie von allem.UISwipeGestureRecognizer führt keine Methode aus
App-Stammansicht ist eine UINavigationController
, die Klasse ViewController
als für die erste Ansicht sichtbar hat. Ich habe eine UIButton
, die einen Film abfeuert, der wiederholt, bis ich es zweimal tippe, die der Navigationssteuerpult einen neuen ViewController, den ich gemacht habe, genannt PUPPETS1 auf den Schirm schiebe. Dieser VC hat seine eigene XIB. Die Xib hat eine UIImageView
. Was ich möchte, ist, einen Film zu starten, sobald ich auf dem Bildschirm wische, aber das passiert nie, und die Konsole zeigt nie mein NSLog von der Methode der zweiten VC.
- (void)loopVideo {
NSURL *videoURL = [[NSBundle mainBundle] URLForResource:@"warpspeed" withExtension:@"mov"];
UIView *patternView = [[UIView alloc] initWithFrame:self.view.bounds];
patternView.backgroundColor = [UIColor blackColor];
[self.moviePlayer2.backgroundView addSubview:patternView];
self.moviePlayer2 = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
[self.moviePlayer2 setControlStyle:MPMovieControlStyleDefault];
self.moviePlayer2.controlStyle = MPMovieControlStyleNone;
self.moviePlayer2.scalingMode = MPMovieScalingModeAspectFill;
self.moviePlayer2.movieSourceType = MPMovieSourceTypeFile;
[self.moviePlayer2 setAllowsAirPlay:YES];
self.moviePlayer2.view.frame = self.view.frame;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(puppetOne)];
tapGesture.numberOfTapsRequired = 2;
tapGesture.numberOfTouchesRequired = 1;
UIView *aView = [[UIView alloc] initWithFrame:self.moviePlayer2.backgroundView.bounds];
[aView addGestureRecognizer:tapGesture];
[self.view.window addSubview:aView];
[self.view addSubview:self.moviePlayer2.view];
self.moviePlayer2.repeatMode = MPMovieRepeatModeOne;
[self.moviePlayer2 play];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
Im 2. VC, die PUPPETS1 ein:
- (void)viewDidLoad {
[super viewWillAppear:YES];
UISwipeGestureRecognizer * swipeRec = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(playPuppets)];
swipeRec.direction = UISwipeGestureRecognizerDirectionUp;
UIView *aView2 = [[UIView alloc] initWithFrame:self.view.bounds];
[aView2 addGestureRecognizer:swipeRec];
[self.view addSubview:aView2];
// Do any additional setup after loading the view from its nib.
}
-(void)playPuppets {
NSLog(@"PLAYING");
NSURL *videoURL = [[NSBundle mainBundle] URLForResource:@"SundayPuppets" withExtension:@"m4v"];
//filePath may be from the Bundle or from the Saved file Directory, it is just the path for the video
AVPlayer *player = [AVPlayer playerWithURL:videoURL];
AVPlayerViewController *playerViewController = [AVPlayerViewController new];
playerViewController.player = player;
//[playerViewController.player play];//Used to Play On start
[self presentViewController:playerViewController animated:YES completion:nil];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
Warum haben Sie Super viewWillAppear: ja in viewDidLoad? Sind Sie sicher, dass die ViewDidLoad-Methode für Ihre zweite VC aufgerufen wird? [super viewWillAppear: JA]; shud sein [super viewDidLoad]; –
@TejaNandamuri Das war ein Tippfehler von früher, als ich viewWillAppear versuchte. Ich habe gerade ein NSLog in die ViewDidLoad hinzugefügt und es wird in der Konsole angezeigt. – user717452
versuchen, Gestenerkenner zu self.view anstelle von aView2 hinzuzufügen. Ich denke, aView ist nicht richtig eingerahmt in viewDidLoad –