간단한 연습의 [아이폰 OS] VR을 사용하는 --GVR

  VR은 아이폰 OS에 상대적으로 화재 주제, 통합 및 파노라마 VR 재생입니다 고려의 매우 가치가 연습을 이동합니다. 최근이 회사는 또한 APP에 VR 기능을 통합하기 위해 준비했다. 그래서 나는 또한 다음 VR 기능의 개발을 이해합니다. 우리가 신속하게 VR, GVRSDK 달성 할 수있는 프로젝트가있다 (구글 VR SDK)이이에 따라 어느 구글에서 제공하는 아주 좋은 대표는, 우리는 신속하게 좋은 성능과 파노라마 VR 플레이어를 얻을 수 있습니다. (+ 비디오 파노라마 사진 파노라마 놀이 연주)

  아도, 직접 라인과 코드

A, SDK 소개

  수입 GVRSDK은 매우 간단합니다, 우리는 cocoapods을 통해 가져올 수 있습니다.

대상 ' VRDemo은 '  
  # 주석 다음 줄 경우 당신이 돈 ' t는 동적 프레임 워크 사용하려는 

  # 포드 에 대한 VRDemo은 
  깍지 ' GVRSDK ' 

  대상 ' VRDemoTests이 '  
    상속을 ! : search_paths 
    # 포드 에 대한 테스트 
  최종 

  목표 ' VRDemoUITests은 '  
    # 포드를 위한 테스트 

 

성공적으로 가져온 후 이러한 결과입니다.

둘째, 부하 표시 파노라마

GVRSDK 파노라마 사진 재생 클래스는 두 개의 부하 인터페이스를 지원, GVRPanoramaView입니다.

/ * * 
 * 형 @c있는 UIImage :: kGVRPanoramaImageTypeMono에서 360 파노라마 이미지를로드. 
 * 
 화상 * nil이 경우, 상기 뷰를 클리어한다. 
 * / 
- ( 무효 ) loadImage (있는 UIImage * ) 화상; 

/ * * 
 * 형 @c있는 UIImage :: GVRPanoramaImageType에서 360 파노라마 이미지를로드. 
 * 
 화상 * nil이 경우, 상기 뷰를 클리어한다. 
 * / 
- ( 무효 ) loadImage (있는 UIImage *) 화상 ofType (GVRPanoramaImageType)에 imagetype;

인터페이스에서 볼 수 있듯이, 그것은 직접 네트워크 사진을로드하지 않고,있는 UIImage 사용. 그래서 이러한 인터페이스를 사용하기 전에, 당신은 다운로드 사진에 대한 네트워크 자원을 시작해야합니다.

GVRPanoramaImageType 유형은 두 가지 선택 가능한 값 (kGVRPanoramaImageTypeMono 및 kGVRPanoramaImageTypeStereoOverUnder)이 열거. 전자 지정 상부 이미지를 참조하여 좌측 상단 부분에 대응하는 소스 이미지의 하부는 소스 이미지의 하나의 이미지는, 하부 절반은 오른쪽 눈에 대응.

GVRWidgetView 헤더 파일에서 본 GVRPanoramaView 상위 GVRWidgetView는, 이러한 여부를보기 VR 점프 버튼 또는 같은 그러한 프레젠테이션 모드와 (매립 부모보기 / 팬 / 파노라마 +에 표시 버튼에 특정 속성에 오퍼레이터 허락 VR /). 우리는 서브 클래스 GVRPanoramaView에 따라 좋은 값을 설정해야합니다. GVRWidgetView 또한 개발자 (예 : 부하의 성공 또는 실패와 같은) 상황 GVRPanoramaView 부하를 이해하는 데 도움이 수, 에이전트를 제공합니다.

위의 분석을 읽고, 우리는 그것을 수행하는 방법, 우리가 다운로드 사진 다음로드 파노라마에 공통 SDWebImage을 사용할 수 있습니다 알고 있습니다.

[SDWebImageManager sharedManager] loadImageWithURL [NSURL URLWithString : VR_IMG_URL] 선택해 SDWebImageScaleDownLargeImages가 진행 ^ (NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable에서 targetUrl)을 {
         플로트 진행 = receivedSize * 100 / expectedSize; 
        NSLog ( @ " 当前下载进度:. % 2LF %% " 진행); 
        
    } 완료 : ^ (있는 UIImage * _Nullable 이미지있는 NSData * _Nullable 데이터 NSError * _Nullable 에러 SDImageCacheType cacheType는 BOOL 완료, NSURL * _Nullable 이미지 URL) {
         경우 (화상) {
 //             @autoreleasepool { 
                [self.panoramaView loadImage : 이미지] ;
//             }; 
        }
         IF가 (오류) { 
            NSLog는 ( @ " 다운로드 사진 실패 " ); 
        } 
    }];
    
//自定义一些相关配置
- (GVRPanoramaView * ) panoramaView { 경우 (! _panoramaView) { _panoramaView = [GVRPanoramaView ALLOC] initWithFrame : self.view.bounds]; _panoramaView.enableTouchTracking = YES; _panoramaView.enableInfoButton = YES; _panoramaView.enableFullscreenButton = YES; _panoramaView.enableCardboardButton = YES; } 반환 _panoramaView을; }

물론, 자리의 일부 및 로딩이 우리가 자신을 추가 할 필요가 진행을 보여줍니다. 나는 당신이 다른 요구 사항에 따라 사용자 정의 할 수 있습니다, 자신을 추가 할 필요가 없습니다.

셋째, panoptic 비디오를로드

GVRSDK 파노라마 사진 재생 클래스는 부하와 비디오 소스 재생, 정지 및 정지 제어를 지원, GVRVideoView입니다

/ * * 
 * URL에서 로컬 또는 원격 비디오를 넣고 재생을 시작합니다. 
 * 
 *이 비디오는 유형으로 가정 :: kGVRVideoTypeMono. 
 * / 
- ( 무효 ) loadFromUrl (NSURL * )에서는 videoURL; 

/ * * 
 * URL에서 로컬 또는 원격 비디오를 넣고 재생을 시작합니다. 
 * 
 * 비디오 타입 @c videoType 의해 설정된다. 
 * / 
- ( 무효 ) loadFromUrl (NSURL * )에서는 videoURL ofType (GVRVideoType) videoType; 

/ * * 비디오를 일시 중지합니다. * / 
- ( 공극 ) 일시; 

/ * * 시작 또는 비디오를 다시 시작합니다. * / 
- ( 공극 ) 플레이;

/ * * 비디오를 중지합니다. * / 
- ( 공극 ) 정지;

loadFromUrl :의 매개 변수에서는 videoURL뿐만 아니라 비디오 소스 라인의 URL은 또한 인터페이스 GVRPanoramaView의 부하보다 더 강력한 URL 로컬 비디오 자원이 될 수있다. 우리는 비디오 문제를 다운로드에 대해 걱정할 필요가 없습니다.

열거 형 GVRVideoType 세 가지 옵션 값이 있습니다. kGVRVideoTypeMono, kGVRVideoTypeStereoOverUnder 및 kGVRVideoTypeSphericalV2는 kGVRVideoTypeMono 비디오 kGVRVideoTypeSphericalV2 대표 구형 비디오 비디오 입력하고, 두 부분 kGVRVideoTypeStereoOverUnder 비디오 소스이며, 하나의 비디오 소스를 나타낸다.

GVRVideoView 또한 부모 GVRWidgetView입니다.

GVRVideoView는 비디오 재생 진행률을 얻을 GVRVideoViewDelegate, 에이전트 방법을 제공합니다.

의 #pragma 마크 - UINavigationControllerDelegate
 // 컨트롤러 표시 
- ( 무효 )있는 navigationController : (※ UINavigationController가)있는 navigationController willShowViewController (의 UIViewController * )에의 ViewController 애니메이션 (BOOL) 애니메이션 {
     // 제어기가 자신을 표시하도록 결정하면 
    BOOL isShowHomePage를 = [isKindOfClass의 ViewController : 자기 클래스 ]; 
    [self.navigationController setNavigationBarHidden : 애니메이션 isShowHomePage : YES] 
} 

의 #pragma 마크 - GVRVideoViewDelegate 
- ( 무효 ) widgetViewDidTap (GVRWidgetView * ) widgetView {
     IF (_isPaused) { 
        [_videoView 재생];
    } 다른  {
        [_videoView 일시]; 
    } 
    _isPaused =! _isPaused; 
}

 - ( 무효 ) widgetView : (GVRWidgetView *) widgetView didLoadContent :( ID ) 내용 { 
    NSLog ( @ " 완료 로딩 비디오 " ); 
    [_videoView 플레이]; 
    _isPaused = NO; 
}

 - ( 무효 ) widgetView : (GVRWidgetView *) widgetView didFailToLoadContent :( ID ) 내용 withErrorMessage : (있는 NSString * ) ERRORMESSAGE { 
    NSLog는 ( @ " 로드 비디오에 실패 : %를 @ " , ERRORMESSAGE);
}

 - (+ 무효) VideoView를 지켜 보면서 (GVRVideoView * ) VideoView를 지켜 보면서 didUpdatePosition (NSTimeInterval) 위치 {
     // 루프가 끝에 도달 비디오. 
    NSLog ( @ " ------- didUpdatePosition ::::: % F \ n ------ playableDuration % F \ n ------ 시간 : %의 F " 위치, VideoView를 지켜 보면서 
             .playableDuration , videoView.duration); 
    경우 (위치 == videoView.playableDuration || 때는 isNaN (위치)) { 
        [_videoView seekTo : 0 ]; 
        [_videoView 플레이]; 
    } 다른 { 

    } 
}

 - (GVRVideoView * ) VideoView를 지켜 보면서 {
     경우 (! _videoView) { 
        _videoView = [GVRVideoView ALLOC] initWithFrame : CGRectMake ( 0 , 0 , MAX (SCREEN_WIDTH, SCREEN_HEIGHT), MIN (SCREEN_WIDTH, SCREEN_HEIGHT))]; 
        _videoView. 위임 = 자기; 
        _videoView.enableFullscreenButton = YES; 
        _videoView.enableCardboardButton = YES; 
        _videoView.enableTouchTracking = YES; 
        _videoView.enableInfoButton = NO; 
    } 
    반환 _videoView을; 
}

x는 공식적인 응용 프로그램의 경우 물론, placeholderView, ProgressHUD, 재생 진행률 표시 줄과 재생 버튼이 필수적이다. 헤드폰 삽입 및 제거도 내가 여기에 처리되지 않을 것이다, 해결 될 필요가있다.

간단한 데모. 단어의 요구를 사용하여 설치 포드

추천

출처www.cnblogs.com/weicyNo-1/p/12564512.html