2015-08-31 107 views
0

我有一个for循环来加载MPMoviePlayerController中的一些视频,但我需要停止它,当用户点击backButton。只有在电影加载完成时才能检测到点击事件。我怎么解决它?MPMoviePlayerController initWithContentURL延迟按钮ClickClick

有我的方法,它包含了循环

-(void) criarScrollMidias:(Evento *)evento { 
    NSLog(@"criar scroll midias"); 

    NSMutableArray *listaImagens = evento.atracao.images; 
    NSMutableArray *listaVideos = evento.atracao.videos; 

    if([listaVideos count] > 0) { 
     self.listaVideoPlayers = [[NSMutableArray alloc]init]; 
    } 

    [self.scrollImVd setPagingEnabled:YES]; 

    if(![self.eventoAtual.atracao.imageLarge isKindOfClass:[NSNull class]]) 
    { 

     UIImageView *imgViewAtracao = [[UIImageView alloc]initWithImage:self.eventoAtual.atracao.imageLarge]; 
     [imgViewAtracao setContentMode:UIViewContentModeScaleAspectFit]; 
     [imgViewAtracao setFrame:CGRectMake(0, 0, self.scrollImVd.frame.size.width, self.scrollImVd.frame.size.height)]; 
     [self.scrollImVd addSubview:imgViewAtracao]; 
    } 

    for (int iCnt = 0; iCnt < [listaImagens count]; iCnt++) { 
     NSString *imgURL = [listaImagens objectAtIndex:iCnt]; 
     UIImage *imagemAtracao = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imgURL]]]; 
     UIImageView *imgViewAtracao = [[UIImageView alloc]initWithImage:imagemAtracao]; 

     [imgViewAtracao setContentMode:UIViewContentModeScaleAspectFit]; 
     if(![self.eventoAtual.atracao.imageLarge isKindOfClass:[NSNull class]]) 
      [imgViewAtracao setFrame:CGRectMake(0+self.scrollImVd.frame.size.width*(iCnt+1), 0, self.scrollImVd.frame.size.width, self.scrollImVd.frame.size.height)]; 
     else 
      [imgViewAtracao setFrame:CGRectMake(0+self.scrollImVd.frame.size.width*iCnt, 0, self.scrollImVd.frame.size.width, self.scrollImVd.frame.size.height)]; 

     [self.scrollImVd addSubview:imgViewAtracao]; 
    } 

    for (int iCnt = 0; iCnt < [listaVideos count]; iCnt++) { 
     NSString *videoURLStr = [listaVideos objectAtIndex:iCnt]; 
     NSURL *videoURL = [NSURL URLWithString:videoURLStr]; 
     MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 
     [moviePlayer setShouldAutoplay:NO]; 
     [moviePlayer.view setBackgroundColor:[UIColor colorWithPatternImage:[self gerarPreviewVideo:videoURL]]]; 

     CGFloat posicaoInicial = 0.0; 
     if(![self.eventoAtual.atracao.imageLarge isKindOfClass:[NSNull class]]) 
      posicaoInicial = self.scrollImVd.frame.size.width * ([listaImagens count] + 1); 
     else 
      posicaoInicial = self.scrollImVd.frame.size.width * [listaImagens count]; 

     [moviePlayer.view setFrame:CGRectMake(posicaoInicial+self.scrollImVd.frame.size.width*iCnt, 0, self.scrollImVd.frame.size.width, self.scrollImVd.frame.size.height)]; 

     UIButton *playButton = [[UIButton alloc] initWithFrame:CGRectMake(moviePlayer.view.frame.origin.x+(self.scrollImVd.frame.size.width/2)-34, moviePlayer.view.frame.origin.y+(self.scrollImVd.frame.size.height/2)-33, 67, 66)]; 
     [playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; 
     playButton.tag = iCnt; 
     [playButton addTarget:self action:@selector(playButtonClick:) forControlEvents:UIControlEventTouchUpInside]; 

     [self.scrollImVd addSubview:moviePlayer.view]; 
     [self.scrollImVd addSubview:playButton]; 
     [self.listaVideoPlayers addObject:moviePlayer]; 
    } 

    if(![self.eventoAtual.atracao.imageLarge isKindOfClass:[NSNull class]]) 
     [self.scrollImVd setContentSize:CGSizeMake(self.scrollImVd.frame.size.width * ([listaImagens count] + [listaVideos count] + 1), self.scrollImVd.frame.size.height)]; 
    else 
     [self.scrollImVd setContentSize:CGSizeMake(self.scrollImVd.frame.size.width * ([listaImagens count] + [listaVideos count]), self.scrollImVd.frame.size.height)]; 
    [self.viewLoading setHidden:YES]; 
} 

,并有按钮点击事件:

-(IBAction)btnVoltarClick:(id)sender { 
    [self.playerVideo stop]; 
    [self transicaoVoltar]; 
    [self.presentingViewController dismissViewControllerAnimated:NO completion:nil]; 
} 

我把一个断点btnVoltarClick事件,它被触发,只有当法criarScrollMidias

finish

回答

1

我解决了我的问题roblem在一个新的线程中调用criarScrollViewMidias

[NSThread detachNewThreadSelector:@selector(criarScrollMidias:) toTarget:self withObject:self.eventoAtual]; 
+0

确保每一个UI相关的代码在主线程中执行。如果不是,则会在设置时遇到延迟,例如背景颜色。 – lucaslt89