首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPMoviePlayerController initWithContentURL延迟buttonClick

MPMoviePlayerController initWithContentURL延迟buttonClick
EN

Stack Overflow用户
提问于 2015-08-31 19:44:24
回答 1查看 34关注 0票数 0

我有一个for循环,可以在MPMoviePlayerController中加载一些视频,但是当用户单击backButton时,我需要停止它。只有在电影加载完成后,才会检测到单击事件。我怎么能解决这个问题?

这是我的方法,它包含循环

代码语言:javascript
复制
-(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];
}

这里有一个按钮单击事件:

代码语言:javascript
复制
-(IBAction)btnVoltarClick:(id)sender {
    [self.playerVideo stop];
    [self transicaoVoltar];
    [self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
}

我在btnVoltarClick事件中放置了一个断点,只有在方法criarScrollMidias时才会触发它。

完成

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-31 19:47:59

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

代码语言:javascript
复制
 [NSThread detachNewThreadSelector:@selector(criarScrollMidias:) toTarget:self withObject:self.eventoAtual];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32318790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档