3

... 내 코드는 ... 여기MPMoviePlayerController 스케일링 모드 문제 난 그냥 MPMoviePlayerController를 사용하여 비디오를 재생하고

-(void)playMovie:(NSURL *)url 
{ 
    moviePlayer = 
    [[MPMoviePlayerController alloc] 
    initWithContentURL:url]; 
    if (IDIOM==IPAD) { 
     [moviePlayer.view setFrame:CGRectMake(22,100, 720, 300)]; 
    } 
    else 
    { 
     (IS_IPHONE_5)? [moviePlayer.view setFrame:CGRectMake(22, 70, 280, 150)]:[moviePlayer.view setFrame:CGRectMake(22, 40, 260, 140)]; 
    } 
    [_scrollView addSubview:moviePlayer.view]; 
    moviePlayer.scalingMode =MPMovieScalingModeFill; 
    [moviePlayer prepareToPlay]; 
    [moviePlayer play]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerDidEnterFullscreen:) name:MPMoviePlayerDidEnterFullscreenNotification object:Nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerDidExitFullScreen:) name:MPMoviePlayerDidExitFullscreenNotification object:Nil]; 

} 

-(void)moviePlayerDidEnterFullscreen :(id)sender 
{ 
    NSLog(@"fullscreen"); 
    [moviePlayer play]; 
    moviePlayer.scalingMode =MPMovieScalingModeFill; 

} 

- (void) moviePlayerDidExitFullScreen:(id)sender { 

    NSLog(@"exit full screen"); 
    [moviePlayer play]; 
    moviePlayer.scalingMode =MPMovieScalingModeFill; 

} 

하지만, 내 문제는 내가 전체 화면을 누르면 전체 화면에 비디오를 보여줍니다 .. 내가 "전체 화면"을 누른 다음 내 비디오 모드가 "MPMovieScalingModeAspectFit"mode.but로 이동하면 "MPMovieScalingModeFill"모드가 항상 필요합니다 .whats가 잘못되었습니다. 내 코드 ... 제발 도와주세요 ...

+0

전체 화면 알림에서 '재생'을 실행해서는 안됩니다. – Till

+0

하지만 전체 화면 알림 내에서 다시 재생을 호출하므로 재생이 중지됩니다. – jafar

+0

전혀 이해가되지 않습니다. 전체 화면에서 또는 전체 화면으로 변경할 때 재생이 멈추지 않아야합니다. 코드 내에 재생을 멈추게하는 것을 보여주지 않은 무언가가 있어야합니다. 내 생각에, 당신은 "viewWill/DidAppear"/ "viewWill/DidDisappear"내에서 무언가를 얻었습니다. 전체 화면 모드를 떠나거나 입력 할 때 이러한 모양 알림이 트리거되어 viewController의 뷰가 완전히 숨겨집니다. – Till

답변

3

나는 이것이 MPMoviePlayerScalingModeDidChangeNotification을 생성 할 것이라고 생각합니다.

[[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(movieScalingModeDidChange:) 
       name:MPMoviePlayerScalingModeDidChangeNotification 
       object:nil]; 

출처 : 동영상 플레이어의 크기 조절 모드가 변경되면 게시 Apple Doc

MPMoviePlayerScalingModeDidChangeNotification

. userInfo 사전이 없습니다. 스케일링 모드는 프로그래밍 방식으로 또는 사용자 상호 작용 방식으로 변경할 수 있습니다. 무비 플레이어의 크기 조절 모드를 설정하거나 가져 오려면 scalingMode 속성에 액세스하십시오. 상태가 변경된 무비 플레이어는 알림과 연결된 객체로 사용할 수 있습니다.

1

"이상적인"솔루션이 아니지만 작동합니다! 기본적으로 전체 화면을 종료하면 MPMoviePlayerController 인스턴스가 모두 엉망이되어 MPMovieScalingModeFill에 대한 배율 속성을 재설정하면 어디에서 언제든지 작업을 수행 할 수 있습니다 (모든 종류의 작업을 시도하고 1 시간 후에 포기). 가장 쉬운 해결책은 MPMoviePlayerController를 제거하고 단순히 전체 화면이 종료 될 때마다 MPMoviePlayerController의 새로운 인스턴스를 할당하는 것이다 (이상적이지,하지만 완전히 작동) :

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:NO]; 
    if (self.moviePlayer != nil) 
     [self.moviePlayer.view removeFromSuperview]; 
    self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:self.videoURL]; 
    self.moviePlayer.view.frame = CGRectMake(#, #, #, #); 
    self.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
    self.moviePlayer.shouldAutoplay = NO; 
    [self.moviePlayer setContentURL:self.videoURL]; 
    [self.moviePlayer prepareToPlay]; 
    [self.moviePlayer setScalingMode:MPMovieScalingModeFill]; 
    [self.view addSubview:self.moviePlayer.view]; 
} 

PS : viewDidAppear에 슈퍼에 전화하거나 고통을 잊지 마세요 예측할 수없는 신체 상해의 모든 종류 (아이폰 OS 개발에 매우 ​​일반적인 실수는)

3

먼저

스위프트 코드 없음으로 ScalingMode를 설정 한 다음 AspectFill에 ScalingMode을 설정

NSNotificationCenter.defaultCenter().addObserver(self, selector: "moviePlayerExitFullscreen:", name: MPMoviePlayerDidExitFullscreenNotification, object: self.moviePlayer) 
NSNotificationCenter.defaultCenter().addObserver(self, selector: "moviePlayerEnterFullscreen:", name: MPMoviePlayerWillEnterFullscreenNotification, object: self.moviePlayer) 

func moviePlayerEnterFullscreen (notification : NSNotification) 
{ 
    self.moviePlayer.scalingMode = MPMovieScalingMode.None 
    self.moviePlayer.scalingMode = MPMovieScalingMode.AspectFill 
} 

func moviePlayerExitFullscreen (notification : NSNotification) 
{ 
    self.moviePlayer.scalingMode = MPMovieScalingMode.None 
    self.moviePlayer.scalingMode = MPMovieScalingMode.AspectFill 
}